我使用下面的脚本作为清理脚本。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找到文件时对其进行评估。