我需要用多种模式重命名数百万个文件。
有些文件名有几个字符需要替换。
为了不扫描所有文件多次,我想做所有的替换一次。
我试过这些剧本:

find . -type f -name '*\.jpg' -exec rename 's/%c3%a0/\xc3\xa0/g' {} \; -exec rename 's/%c3%a9/\xc3\xa9/g' {} \; -exec rename 's/%c3%aa/\xc3\xaa/g' {} \;

find . -type f -name '*\.jpg' -exec rename 's/%c3%a0/\xc3\xa0/g' | -exec rename 's/%c3%a9/\xc3\xa9/g' | -exec rename 's/%c3%aa/\xc3\xaa/g'

这些脚本只替换一个字符。
请帮忙。

最佳答案

我想问题是你的第一个rename重命名了文件,所以当你的第二个exec在同一个文件上时,它已经消失了,因为它已经被第一个重命名了!
我认为一次完成所有替换会更好,它还可以节省每个文件执行rename多次的时间:

find ... -exec rename 's/a/b/g; s/c/d/g; s/e/f/g' {} \;

关于linux - 查找多个重命名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49083961/

10-11 03:36