【发布时间】: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