Bash 查找-执行与\;运行但+;终止符失败,并带有“;缺少参数-exec“;
有时,Bash 查找-执行与\;运行但+;终止符失败,并带有“;缺少参数-exec“;,bash,unix,find,Bash,Unix,Find,有时,find命令拒绝使用+终止符执行其-exec,而只是将+更改为\允许exec运行 在进行以下设置后,请考虑: find_args=( -type f -name "*users*" -cmin -60 ) rsync_args=( -avhP -e 'ssh -i /home/some_user/.ssh/id_rsa -c arcfour' ) dest=some_user@some_host:/some/destination/ 这项工作: # runs rsync once p
find
命令拒绝使用+
终止符执行其-exec
,而只是将+
更改为\代码>允许exec运行
在进行以下设置后,请考虑:
find_args=( -type f -name "*users*" -cmin -60 )
rsync_args=( -avhP -e 'ssh -i /home/some_user/.ssh/id_rsa -c arcfour' )
dest=some_user@some_host:/some/destination/
这项工作:
# runs rsync once per file, thus slower than it should need to be
find . "${find_args[@]}" -exec rsync "${rsync_args[@]}" {} "$dest" \;
……但这次失败了:
# exactly the same, except for + rather than \;
# ...should use the same rsync call for multiple files.
find . "${find_args[@]}" -exec rsync "${rsync_args[@]}" {} "$dest" +
…出现错误find:缺少'-exec'
的参数
我使用的是GNU findutils 4.4.2,它被记录为支持+
参数。在find-exec。。。{}+
,则+
必须紧跟在{}
之后(因此插入的参数必须位于尾随位置)。您给定的命令不符合此要求
考虑以下解决方法:
find . -type f -name "*users*" -cmin -60 \
-exec sh -c 'rsync -avhP -e "ssh -i /home/some_user/.ssh/id_rsa -c arcfour" "$@" some_user@some_host:/some/destination/' _ {} +
因为sh-c[…]
行比它运行的rsync
行长,所以传递给前者的任何参数列表都保证对后者有效,所以扩展“$@”
总是会成功的。Charles,我不认为这是重复的。事实上,您链接到的问题就是这个问题的答案。@ghoti,…另一个问题中的OP已经隔离了find
不允许{}…其他内容+代码>并询问如何解决此问题。这里的OP还没有达到目的——但是,它们所涉及的限制是相同的,任何一个答案都会同时回答这两个问题。@ghoti,……当然,按照当前OP的方式思考另一个问题的人可能不太清楚,但这就是为什么我们(作为一个站点)想要好的副本,保留它们,允许人们从被愚弄的问题中获得代表性:作为单一规范知识来源的指南,尽管从不同角度/以不同的先验知识水平看待问题可能会有不同的解释。这一点很好。有人认为重复标记是一种陈述,当前问题可能应该删除,因为它是多余的。不同的人表达相似问题的方式会大不相同。或许可以颁布一个更灵活的“重复”定义: