我有一个for
循环,循环遍历目录中的所有文件。我想在每个文件上运行一个进程(在此示例中为echo
文件名和sleep 5
)。但是,我希望能够一次运行这5个文件(在后台使用&
)。问题是我无法弄清楚如何在$f
循环中迭代while
,这样我最终不会同时处理同一个文件五次而不是五个不同的文件。
#!/bin/bash
maxjobs=5
for f in `ls /home/user/`
do
jobsrunning=0
while [ $jobsrunning -lt $maxjobs ]
do
echo "Converting file"$f
sleep 5 & #wait for 5 seconds
jobsrunning=$((jobsrunning + 1))
echo $jobsrunning
done
wait
done
答案 0 :(得分:3)
你真的只需要重置jobsrunning
,我根本不认为你需要内循环。这只是一个条件。
#!/bin/bash
maxjobs=5
jobsrunning=0
for f in /home/user/*; do
if (( jobsrunning >= maxjobs )); then
wait
jobsrunning=0
fi
echo "converting"
sleep 5 & # wait for how many seconds?
(( jobsrunning++ ))
echo "$jobsrunning"
done
wait
那就是说,这听起来像是parallel的工作。