Unix发现:多个-o和exec不能一起工作

时间:2015-03-20 08:07:43

标签: bash unix find osx-mavericks

当我运行以下命令时,尽管find命令显示结果,但不会移动任何文件。

find "/Users/Vino/Media/test" -type f -size +100M \
  -name *.mkv -o -name *.mp4 -o -name *.avi \
  -exec mv {} /Users/Vino/Media/ \;

但当我删除.avi和.mp4的or运算符时,它会实现它的意义

find "/Users/Vino/Media/test" -type f -size +100M \
  -name *.mkv -exec mv {} /Users/Vino/Media/ \;

这有点令人费解,因为它是一个相当简单的命令,我曾经在OS X 10.6下运行。我现在正在使用OS X 10.9。

1 个答案:

答案 0 :(得分:3)

将我的评论转化为答案。

你必须明确find -o的操作数。您可以通过使用()

进行分组来实现
find "/Users/Vino/Media/test" -type f -size +100M \
  \( -name *.mkv -o -name *.mp4 -o -name *.avi \) \
  -exec mv {} /Users/Vino/Media/ \;

来自the man page

( expr )
       Force precedence.  Since parentheses are special to  the  shell,
       you  will  normally need to quote them.  Many of the examples in
       this manual page use backslashes  for  this  purpose:  `\(...\)'
       instead of `(...)'.