Linux 使用多重重命名查找

Linux 使用多重重命名查找,linux,bash,file-rename,Linux,Bash,File 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 '*\.

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

我尝试了以下脚本:

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

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

你能说得更具体些吗?您想如何重命名您的文件?你有什么意见?预期产量?如果你能多描述一点,而不是期望我们破译你的命令,这会让我们的生活更轻松。当然像
rename'/%(\x\x)/chr(oct(“0x$1”))/ge'
这样的东西只需要一次调用,但我不知道是否有
rename
暴露了它的大量内部内容。也许可以重写为Perl one liner。@triplee我相信您可以在其中编写任意大而复杂的脚本。有许多
rename
实现,但如果您使用的实现支持这一点,那就太好了!(-: