Unix find命令后如何使用xargs执行脚本

Unix find命令后如何使用xargs执行脚本,unix,Unix,我尝试执行,但它只打印它。我如何并行运行它 find . -name "recovery_script" | xargs 用于8个并行进程。 前提是至少有8个地方可以找到“恢复脚本” -n1参数是一次向sh提供一个参数所必需的。否则,xargs将同时向sh提供合理数量的参数,这意味着它正在尝试执行类似于 find . -name "recovery_script" | xargs -n1 -P8 sh 而不是 sh dir1/recovery_script dir2/recovery_scr

我尝试执行,但它只打印它。我如何并行运行它

find . -name "recovery_script" | xargs
用于8个并行进程。
前提是至少有8个地方可以找到“恢复脚本”

-n1
参数是一次向
sh
提供一个参数所必需的。否则,
xargs
将同时向
sh
提供合理数量的参数,这意味着它正在尝试执行类似于

find . -name "recovery_script" | xargs -n1 -P8 sh
而不是

sh dir1/recovery_script dir2/recovery_script dir3/recovery_script ...
同时

额外好处:您的命令可以比单个命令长,包括选项。我经常使用
nice
来允许其他流程继续进行而不会出现问题:

sh dir1/recovery_script
sh dir2/recovery_script
sh dir3/recovery_script
...
其中,
-n19
nice
的选项,而不是
xargs

(旁白:如果您曾经在
查找
中对
-name
使用通配符,请使用
-print0
选项来查找
,使用
-0
选项来查找
-xargs
:该选项通过空字符而不是空格来分隔输出和输入(因为后者可能是文件名的一部分).既然您在这里搜索全名,那就没问题了。)


xargs
手册页面:

简介:
xargs
。。。[命令[初始参数]]

。。。并执行命令(默认值为/bin/echo)一次或多次,使用任何初始参数,后跟从标准输入读取的项


因此,默认行为是回显您给
xargs
的任何参数。提供类似于
sh
(可能取决于您试图运行的可执行文件)的命令即可工作。

此解决方案不使用xargs,而是使用一个简单的bash脚本。也许它可以帮助:

find . -name "recovery_script" | xargs -n1 -P8 nice -n19

这很可能是重复的;您是否尝试过搜索
xargs parallel
?它不起作用。它不运行所有脚本simultaneously@Alex单个恢复脚本运行多长时间?以及有多少恢复脚本(即,
find
的输出)。脚本运行几分钟,共有十个脚本。我在unix 128Bit上运行它,你能给我完整的例子吗?@Alex这是答案的顶部。你错过了什么?
#!/bin/sh

for i in $(find -name recovery_script)
do
    {
       echo "Started $i"
       $i
       echo "Ended $i"
    } &
done
wait