【问题标题】:find works, but find -exec doesn’tfind 有效,但 find -exec 无效
【发布时间】:2014-07-27 02:37:45
【问题描述】:

我正在尝试在给定文件夹的子文件夹中查找所有图像,并将它们移动到其他位置。我在运行 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 示例工作。我做错了什么?

【问题讨论】:

  • 对不起,如果我标记错了。 findargs 看起来不太对,但它们是我能找到的最好的。
  • sh -c mv ... 毫无意义。只需-exec mv {} $destination \;

标签: macos shell find args


【解决方案1】:

您需要在所有名称测试周围加上括号:

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

否则,-exec 仅适用于匹配 *.gif 的文件。

当您省略该操作时,-o 的每个分支中都有一个默认的-print。但如果命令中有任何操作选项,则任何地方都没有默认操作。

【讨论】:

  • 完美!我不知道发生了什么的原因是我的文件夹中没有任何 GIF。谢谢!
  • 我遇到了相反的问题。我尝试运行你的版本,它产生了很多输出,所以我认为没有问题。然后我注意到它们只是 GIF,不是 JPG。
【解决方案2】:

这些应该可以工作(确保 $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 \;

【讨论】:

  • 没错。没有多余的sh -c
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 2016-05-20
  • 2011-10-31
  • 2010-11-02
  • 1970-01-01
相关资源
最近更新 更多