2014-06-05 25 views
0

我试图找到给定文件夹的子文件夹中的所有图像,并将它们移动到其他地方。我在运行OS X 10.9.3的Mac上尝试了以下zsh(我的默认设置)和sh(大多数教程似乎使用的)。找到的作品,但找到-exec不

这将打印出的$someDir子文件夹的所有影像:

find "$someDir" -iname \*.jpg -o -name \*.png -o -name \*.gif 

然而,当我想这些图像传递给另一个命令,我不能让它开始工作。作为练习,我echo试了一下:

find "$someDir" -iname \*.jpg -o -name \*.png -o -name \*.gif -exec sh -c "echo hello {}" \; 

它只是静静地返回,而$?0

我最终想沿着​​这些线路做一些事情:

find "$someDir" -iname \*.jpg -o -name \*.png -o -name \*.gif -exec sh -c "mv {} $destination" \; 

但我甚至无法获得echo示例工作。我究竟做错了什么?

+0

对不起,如果我标记错误。 'find'和'args'看起来不太合适,但他们是我能找到的最好的。 –

+0

'sh -c mv ...'是毫无意义的。只要'-exec mv {} $ destination \;'。确切地说, – Kaz

回答

2

你需要把括号周围所有的名测试:

find "$someDir" \(-iname \*.jpg -o -name \*.png -o -name \*.gif \) -exec sh -c "echo hello {}" \; 

否则,-exec只对文件做过匹配*.gif

当您忽略该操作时,-o的每个分支中都会有一个默认-print。但是,如果命令中有任何操作选项,则不会在任何地方执行默认操作。

+0

完美!我无法确定发生了什么的原因是我没有任何问题文件夹中的GIF文件。谢谢! –

+0

我有相反的问题。我试着运行你的版本,它产生了很多输出,所以我认为没有问题。然后我发现他们只有GIF,没有J​​PG。 – Barmar

1

这些应该工作(确保$目的地定义)

find "$someDir" \(-iname \*.jpg -o -name \*.png -o -name \*.gif \) -exec echo hello {} 
find "$someDir" \(-iname \*.jpg -o -name \*.png -o -name \*.gif \) -exec mv {} $destination \; 
+0

。没有多余的'sh -c'。 – Kaz