首先,我阅读了相关主题,但是没有一个主题解释了我的疑问。
我有一个下面的命令可以正常工作:
find ./source/ -maxdepth 1 -type f ! -name "secretinfo.md" -exec cp {} ./build/ \;
但是,使用;
意味着我将每个找到的文件一个一个地传递给cp命令。我以为我可以一次通过cp命令允许它们全部通过。根据我发现的其他answear:
-exec命令必须以;结尾; (因此您通常需要 键入\;要么 ';'以避免被shell解释)或+。的 区别在于,使用;,每个文件调用一次命令,使用 +,它被调用的次数越少越好(通常一次,但是命令行有最大长度,因此可能会被分割) 所有文件名
因为那是我所做的:
find ./source/ -maxdepth 1 -type f ! -name "secretinfo.md" -exec cp {} ./build/ +
在这里我得到一个错误:
find: missing argument to `-exec'
您能告诉我为什么不允许这样做吗?
答案 0 :(得分:1)
+
可以,但是您在exec中使用参数不正确。
您可以尝试:
find ./source/ -maxdepth 1 -type f ! -name "secretinfo.md" -exec bash -c 'cp $@ ./build/' - {} +
或
find ./source/ -maxdepth 1 -type f ! -name "secretinfo.md" -exec cp --target-directory=./build/ {} +
尽管可能不是靠满足,why
的原因是这样的because it is supposed to
;在man find
中,您可能会看到:
-exec命令{} +
,您可能会注意到该命令在{} +
之前( )。
我必须说,我不知道为什么要这样指定(似乎是posix:http://pubs.opengroup.org/onlinepubs/009695399/utilities/find.html)
另请参见
Solution to error 'find: missing argument to -exec' with find -exec cp {} TARGET_DIR +
有关其他示例,请参见find: missing argument to -exec