【问题标题】:Solution to error 'find: missing argument to -exec' with find -exec cp {} TARGET_DIR + [closed]使用 find -exec cp {} TARGET_DIR + [关闭] 解决错误“find:缺少 -exec 的参数”
【发布时间】:2012-08-17 03:14:09
【问题描述】:

我正准备将其作为一个问题发布,但在摆弄了一段时间之后,我找到了解决方案。所以我想我会继续在这里发布它以防它帮助其他人。

我在使用 find -exec cmd + 时遇到了问题。我得到了错误:

$ find ./ -name "*JIM*" -exec cp {} $TARGET_DIR +
find: missing argument to `-exec'

如果我使用它会起作用

$ find ./ -name "*JIM*" -exec cp {} $TARGET_DIR \;

但我不想使用它,因为它会为找到的每个文件派生一个新进程。

如果我使用它,它会起作用

$ find ./ -name "*JIM*" -exec ls {} +

它列出了我要复制的所有文件。但是-exec cp {} $TARGET_DIR + 没有用。

我找到的解决办法是:

$ find ./ -name "*JIM*" -exec cp --target-directory=$TARGET_DIR {} +

--target-directory= 也可以替换为-t

希望这会有所帮助。

【问题讨论】:

  • 如果有人能解释为什么第一个失败会很有趣。这并不完全清楚,但手册页似乎暗示您在 {} 和 + 之间不能有任何进一步的参数。
  • 我很想知道为什么这篇文章被关闭为“离题”。从社区定义的范围来看,这似乎属于“程序员常用的软件工具”类别,它包括解决我遇到的特定问题的代码。如果任何关闭它的人可以发表评论,我将不胜感激。谢谢!
  • 诚然,这是一个模糊的规范,但我一直将“程序员常用的软件工具”解释为编译器、链接器、调试器、源代码控制等,而不是通用实用程序。
  • 我认为如果问题转移到超级用户那里会很棒。我觉得它很有用。

标签: bash find arguments exec cp


【解决方案1】:

如开篇所述,我找到的解决方案是:

$ find ./ -name "*JIM*" -exec cp --target-directory=$TARGET_DIR {} +

其中--target-directory=也可以替换为-t

【讨论】:

  • 很好的答案!最重要的一课是,exec 只需要一个 {} 而 cmake 必须将 {} + 作为最后一个参数才能将终止传递给 exec。因此,一般来说,必须修改 exec 运行的命令以将 find 的输入作为最后一个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多