我使用以下脚本作为清理脚本。查找部分返回正确的结果,但由于某种原因,-exec部分不会运行。
find /users/rhysparker/downloads/ -maxdepth 1 -iname \*.pkg -o -iname \*.app -o -iname \*.dmg -exec mv {} /folder/location/ \;
任何帮助都将不胜感激。
答案 0 :(得分:3)
-o
操作的优先级较低,因此-exec
仅与*.dmg
测试绑定。使用括号正确分组语句。 (并引用它们以便shell将它们传递给find
)。
find /users/rhysparker/downloads/ -maxdepth 1 \( -iname \*.pkg -o -iname \*.app -o -iname \*.dmg \) -exec mv {} /folder/location/ \;
答案 1 :(得分:0)
在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
。