背景
我是 linux/unix 新手(我在 Mac 上。不知道我在使用哪个),但是有人用错误的名称创建了很多文件夹和文件,我需要进去并用正确的名字。例如,她将其命名为苹果而不是橙色。
我需要做什么
我导航到感兴趣的目录,在该目录中,我需要:
将任何子文件夹、文件或目录的名称中的“apple”替换为“orange”
在任何文件(文本和非文本)中将“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};完毕
对于文件内容还有许多其他示例,