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