我有一個for
循環將遍歷目錄中的所有文件。我想在每個文件上運行一個進程(在本例中爲echo
文件名和sleep 5
)。不過,我希望能夠一次運行這5個文件(在&
的背景下)。問題是我無法弄清楚如何在while
循環中迭代$f
,這樣我就不會同時處理同一個文件五次而不是五個不同的文件。Bash forke循環與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
你永遠不會將'jobsrunning'重置爲0.但是存在一個更好的解決方案來將文件「提供」給進程。在這裏搜索'find print0 xargs'。不幸的是,最後一個詞可能是「多個」,「工作」,「否」或其他幾個。 – shellter
請[不要分析'ls'](http://mywiki.wooledge.org/ParsingLs) – kojiro
不需要'ls ...'subshell with for。 「for f in/home/user/*」就足夠了 - 與ls不同的是名稱將完全合格,因此不是替代品。可能在你的情況下更可取,因爲對這些文件的操作需要知道隱含的「/ home/user」位置作爲你當前的解決方案需要的「 –