我使用下面的脚本作为清理脚本。find 部分返回正确的结果,但由于某种原因 -exec 部分没有运行。
find /users/rhysparker/downloads/ -maxdepth 1 -iname \*.pkg -o -iname \*.app -o -iname \*.dmg -exec mv {} /folder/location/ \;
任何帮助,将不胜感激。
该-o
操作的优先级较低,因此您-exec
只能与*.dmg
测试绑定。使用括号将语句正确分组。(并引用它们,以便 shell 将它们传递给find
)。
find /users/rhysparker/downloads/ -maxdepth 1 \( -iname \*.pkg -o -iname \*.app -o -iname \*.dmg \) -exec mv {} /folder/location/ \;
在expr1 -o expr2
中,如果expr1
为真,expr2
则不会评估 。
在您的命令中:
-iname \*.pkg OR
-iname \*.app OR
-iname \*.dmg AND -exec mv {} /folder/location/ \;
如果前两个之一为真,则不会评估最后一个。所以你必须使用()
来改变expr:
find /users/rhysparker/downloads/ -maxdepth 1 \( -iname \*.pkg -o -iname \*.app -o -iname \*.dmg \) -exec mv {} /folder/location/ \;
现在,它变成:
(-iname \*.pkg OR -iname \*.app OR -iname \*.dmg) AND
-exec mv {} /folder/location/ \;
这样可以确保在-exec
找到文件时对其进行评估。