linux - 使用包含文件夹的名称搜索并替换为多个文件

标签 linux perl sed terminal find

我有多个文件夹,其名称为:

1_1,1_2,...,2_1,...,

每个文件夹都包含名为 file.sh 的相同文件。该文件具有以下形式:

job_name=NAME

Partition = Long

我想在终端 (Linux) 中对我的所有文件夹使用搜索和替换命令,例如以下

find . -type f -name "file.sh" -print |xargs sed -i 's/job_name/REPLACED_TEXT/g'

REPLACED_TEXT的位置我想要文件夹的名称。例如,在文件夹1_1内,将有file.sh文件,其修改后的形式为:

job_name=1_1

Partition = Long

我还没有找到解决方案。

最佳答案

您没有指定可能需要遍历多少个子目录,例如

./1_1/file.sh
./1_2/file.sh
./a/b/c/1_1/file.sh

因此,为此我只假设一个子目录,如下所示:

./1_1/file.sh
./1_2/file.sh

像下面这样的东西应该能够让你开始,而不是测试,只是把它写在我的脑海里。它是由 bash 脚本编写的,但您可以将其变成一个又大又长的命令。确保首先备份您的目录,以防脚本产生不可预测的结果。

for i in `find . -type f -print "file.sh"`; 
    do
    subdir=`echo $i | awk -F\/ '{print $2}'`
    sed -e s/job_name=NAME/jobname=$subdir/ $i > $i.bak
    mv $i.bak $i
done

关于linux - 使用包含文件夹的名称搜索并替换为多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24251689/

相关文章:

ruby - 将法语(重音)字符放入 Ruby 文件中

mysql - debian linux 升级 mysql - 查找差异后继续

perl - 使用 perl 连接到远程 tty

ubuntu - 使用 sed 在新行上获取匹配的字符串

linux - 设计一个 Linux 字符设备驱动程序,以便多个进程可以读取

c - 为什么++*p++有效而++i++无效?

Perl - 从包中调用主命名空间的子例程

linux - 如何删除 Perl 语言环境警告

linux - 使用 awk 或 sed 重新排列具有空值的列

json - 在bash中用awk/sed解析json得到键值对