bash:同时在多个目录上运行脚本

时间:2015-07-14 15:56:51

标签: bash parallel-processing

假设我有多个目录:nmg_1, nmg_2,..., nmg_5。 每个目录都包含两个子目录:fol, unf。 在每个子目录中都有一个文本文件。

所以,我有这个脚本:run.sh,即读取每个子目录中的某一行文本文件并输出另一个文件。因此,我想知道,有没有办法并行运行脚本,也就是说,脚本可以同时在多个子目录中运行?

1 个答案:

答案 0 :(得分:3)

鉴于run.sh一次对一个文本文件执行所需的处理,以下命令将使4个并行bash会话保持活动状态:

find -name "*.txt" -print0 | xargs -n 1 -P 4 -0 -I {} bash run.sh {}

来自man xargs

--max-procs=max-procs, -P max-procs
      Run up to max-procs processes at a time; the default is 1.
      If max-procs is 0, xargs will run as many processes as possible at a time. 
      Use the -n option with -P; otherwise chances are that only one exec will be done.