转换 find ... -exec 的顺序

转换 find ... -exec 的顺序

我想重命名文件和目录。假设我想将 every 转换äa,并且我已经转换为Järjestelmä/Säätimet。所以我说类似的话find -exec rename 's/ä/a/g'。现在find将转换JärjestelmäJarjestelma然后抱怨它不再找到了Järjestelmä

如果我可以转换命令的顺序exec来运行它就可以解决这个问题。是否可以?如果不是,那么正确的方法是什么?

这不是一个大问题,因为我可以再次运行该命令,直到它不再发生任何更改。无论如何,这让我很恼火。

答案1

使用手册页中的选项find-depth

-depth Process each directory's contents before the  directory  itself.
          The -delete action also implies -depth.

这样它就会Säätimet在之前进行处理,并且不会因为您刚刚重命名而Järjestelmä抱怨无法下降。Järjestelmä

为了防止rename处理整个路径,请在 BSD 和 GNU 等-execdir一些find实现中使用(它更改目录并仅将最后部分传递给命令参数{}./带有一些实现的前缀)):

mkdir Järjestelmä
touch Järjestelmä/Säätimet
find . -depth -execdir rename 's/ä/a/g' {} \;
find .

给出:

./Jarjestelma
./Jarjestelma/Saatimet

相关内容