Xargs:并行运行3个独立的xargs命令

时间:2014-01-16 22:50:43

标签: linux bash xargs

我有以下3个命令(每个命令包含xargs和并行进程),我想并行运行。

1. ls filenames_for_bld*_all | xargs -i bash -c 'calculateMd5Sums "$@"' _ {}
2. cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 10 -I {} remotecmd -q -n server1 md5sum {} 2>/dev/null| tee -a ${dir}/md5sums_for_server1
3. cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 23 -I {} remotecmd -q -n server2 md5sum {} 2>/dev/null | tee -a ${dir}/md5sums_for_server2

每个xargs命令在单独的服务器上运行多个进程。因此1在服务器1-5上运行,2在服务器6上运行,3在服务器7上运行。

是否可以并行运行上述所有3个?

在上面使用xargs会很不错。我正在考虑将上面的3设置为字符串xargsInput,用换行符分隔,然后......

echo $xargsInput | xargs -n 1 -P 3 -I {} sh -c {}

然而,这有一些错误:

ls: xargs: No such file or directory
ls: bash: No such file or directory
ls: calculateMd5Sums: No such file or directory
ls: 20140107: No such file or directory
ls: _: No such file or directory
ls: {}: No such file or directory

1 个答案:

答案 0 :(得分:1)

只需在每行后添加&,最后选择wait,等待所有内容完成:

ls filenames_for_bld*_all | xargs -i bash -c 'calculateMd5Sums "$@"' _ {} &
cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 10 -I {} remotecmd -q -n server1 md5sum {} 2>/dev/null| tee -a ${dir}/md5sums_for_server1 &
cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 23 -I {} remotecmd -q -n server2 md5sum {} 2>/dev/null | tee -a ${dir}/md5sums_for_server2 &
wait

这适用于所有不需要交互的单独shell命令。