0
我有一個腳本,它搜索多個不同文件夾中的短語文件,然後顯示輸出。unix腳本並行運行搜索
麻煩的是,它按順序進行每次搜索並花費很長時間。我想讓搜索無需等待前一個結束就運行。
zipped_folders=("/extlogs/archive/rsyslog/folder1/"
"/extlogs/archive/rsyslog/folder2/")
folders=("/extlogs/rsyslog/Folder1/"
"/extlogs/rsyslog/Folder2/")
portal=0
mobile=0
email=0
if [ "$#" -ne 1 ]; then
echo "Incorrect Argument: logcount 201602"
exit 1
fi
for i in "${zipped_folders[@]}"
do
#echo $i"syslog-"$1*".log.gz"
((portal+=$(nohup gunzip -c $i"syslog-"$1*".log.gz" | grep -i "search1" | grep -v "Search1" | wc -l &)))
((mobile+=$(nohup gunzip -c $i"syslog-"$1*".log.gz" | grep -i "Search2" | wc -l &)))
((email+=$(nohup gunzip -c $i"syslog-"$1*".log.gz" | grep -i "search3" | grep -v "ActiveSync" | wc -l &)))
done
for i in "${folders[@]}"
do
((portal+=$(nohup cat $i"syslog-"$1*".log"| grep -i "search4"| grep -v "exsearch4" | wc -l &)))
((mobile+=$(nohup cat $i"syslog-"$1*".log" | grep -i "search5" | wc -l &)))
((email+=$(nohup cat $i"syslog-"$1*".log" | grep -i "search6" | grep -v "ActiveSync" | wc -l &)))
done
echo "Portal: " $portal
echo "Mobile: " $mobile
echo "Email: " $email
exit 1
好,但是啓動無限數量的並行進程有多危險? –
每次調用xargs時,子進程的數量(AKA「扇出」)是有限的。所有你需要做的就是限制'xargs'調用的數量,例如通過將在子shell中爲搜索提供輸入的代碼分組,並將它作爲'(find ...;)提供給一個'xargs'。找到......; echo「onemore.tgz」)| xargs ...' – bobah