如何在不使用并行命令的情况下使用bash将目录中所有文件的工作分成几个cpus
答案 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
的输出中(通常用于防止文件名中包含空格)