查找多个重命名

Find with multiple rename

我需要用多种模式重命名数百万个文件。 一些文件名有一些我想替换的字符。 为了不多次扫描所有文件,我想一次完成所有替换。

我尝试了这些脚本:

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 对同一个文件进行重命名时,它已经消失了,因为它已经被第一个改名了!

我认为你会更好地一次性完成所有替换,它还会节省每个文件多次执行 rename 的时间:

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