![转换 find ... -exec 的顺序](https://linux22.com/image/85819/%E8%BD%AC%E6%8D%A2%20find%20...%20-exec%20%E7%9A%84%E9%A1%BA%E5%BA%8F.png)
我想重命名文件和目录。假设我想将 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