为什么不会-exec运行?

时间:2012-08-01 00:42:37

标签: bash shell unix

我使用以下脚本作为清理脚本。查找部分返回正确的结果,但由于某种原因,-exec部分不会运行。

find /users/rhysparker/downloads/ -maxdepth 1 -iname \*.pkg -o -iname \*.app -o -iname \*.dmg -exec mv {} /folder/location/ \;

任何帮助都将不胜感激。

2 个答案:

答案 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