0

我使用下面的脚本作为清理脚本。find 部分返回正确的结果,但由于某种原因 -exec 部分没有运行。

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

任何帮助,将不胜感激。

4

2 回答 2

3

-o操作的优先级较低,因此您-exec只能与*.dmg测试绑定。使用括号将语句正确分组。(并引用它们,以便 shell 将它们传递给find)。

find /users/rhysparker/downloads/ -maxdepth 1 \( -iname \*.pkg -o -iname \*.app -o -iname \*.dmg \) -exec mv {} /folder/location/ \;
于 2012-08-01T00:54:51.930 回答
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找到文件时对其进行评估。

于 2012-08-01T01:11:31.713 回答