由于某种原因,下面的命令只会将一定数量的文件而不是所有文件移动到指定的位置:
find /directory1 -iname "*name1*" -or -iname "*name2*" -or -iname "*name3*" \
-or -iname "*name4*" -exec mv -v {} /directory2 \;
问题的原因是什么?
答案 0 :(得分:3)
您需要在-or
条件周围加上括号,以便-exec
适用于所有条件,而不仅仅是最后一个。
find /directory1 '(' -iname "*name1*" -or -iname "*name2*" -or -iname "*name3*" \
-or -iname "*name4*" ')' -exec mv -v {} /directory2 \;
条件和行动之间存在隐含的-and
。当你写
find -cond1 -or -cond2 -or -cond3 -action
它相当于
find -cond1 -or -cond2 -or -cond3 -and -action
优先级高于-and
的{{1}}等同于
-or