查找并替换所有名称

查找并替换所有名称

背景

我是 linux/unix 新手(我在 Mac 上。不知道我在使用哪个),但是有人用错误的名称创建了很多文件夹和文件,我需要进去并用正确的名字。例如,她将其命名为苹果而不是橙色。

我需要做什么

我导航到感兴趣的目录,在该目录中,我需要:

  1. 将任何子文件夹、文件或目录的名称中的“apple”替换为“orange”

  2. 在任何文件(文本和非文本)中将“apple”一词替换为“orange”

我尝试过的

我尝试了这个命令:

grep -lr“苹果”。 | xargs sed -i "s/apple/orange/g"

那根本不起作用

我也尝试过:

查找./-exec sed-i's/apple/orange/g'{} \;

这取代了很多实例,但不是全部。它不会替换文件/文件夹/目录名称中的单词

请帮忙!

答案1

这可能比可能的更 BASHy,但也许它会朝着正确的方向发展。

简而言之,找到所有带有apple的文件夹,反向排序,这样

/tmp/苹果/测试/苹果

当第一个“苹果”发生故障时不会造成麻烦。接下来将输出输入到 while 循环中,其中 read 函数加载一个保存所有匹配文件夹的变量。最后,将文件夹转移到正确的名称结构中。

对于目录,尝试

查找 ./ -regex '^.*apple' -type d |排序-r |当读坏名声时;执行 mv $badname ${badname/%apple/orange};完毕

对于文件名,(清理目录后)

查找 ./ -正则表达式 '^.苹果。' - 类型 f |排序-r |当读坏名声时;执行 mv $badname ${badname/apple/orange};完毕

对于文件内容还有许多其他示例,

Awk/Sed:如何递归查找/替换字符串?

相关内容