我正在尝试查找给定文件夹的子文件夹中的所有图像,并将它们移动到其他位置。我在运行OS X 10.9.3的Mac上zsh
(我的默认值)和sh
(大多数教程似乎都在使用)中尝试了以下内容。
这会打印出$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 :(得分:2)
您需要在所有名称测试周围添加括号:
find "$someDir" \( -iname \*.jpg -o -name \*.png -o -name \*.gif \) -exec sh -c "echo hello {}" \;
否则,仅对匹配-exec
的文件执行*.gif
。
当您忽略该操作时,-print
的每个分支中都有默认-o
。但是,如果命令中有任何操作选项,则无处可选。
答案 1 :(得分:1)
这些应该有效(确保$ destination已定义)
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 \;