bash中dir中每个文件的程序并行执行

时间:2014-09-19 12:15:12

标签: bash

如何在不使用并行命令的情况下使用bash将目录中所有文件的工作分成几个cpus

3 个答案:

答案 0 :(得分:2)

NR_CPUS=3
format=.jpg
job_count=0
for f in *."$format"; do
    mycommand "$f" &
    job_count=$((job_count+1))
    if [ "$job_count" -eq $NR_CPUS ]; then
        wait
        job_count=0
    fi
done

答案 1 :(得分:1)

你可以为每个文件产生一个单独的进程(这就是并行做的......更加巧妙)

 for f in *.jpg; do
   some_program_or_shell_function $f &
 done

答案 2 :(得分:1)

在这种情况下经常使用xargs命令和find命令;像这样:

find . -maxdepth 1 -type f -print0 | xargs -0 -n 1 -P 4 echo

您需要将4替换为所需的最大并发进程数(通常与计算机中用于CPU绑定任务的物理核心数相同)和{{1}使用要在这些文件上运行的程序的实际名称。

选项echo阻止maxdepth在目录中递归(如果您想要递归,则将其删除),并且find / -print0对可用于处理单词拆分安全地在-0的输出中(通常用于防止文件名中包含空格)