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'の呼び出しごとに制限されます。たとえば、検索のための入力をサブシェルにグループ化し、それを単一の 'xargs'に'(find ...;)することで、 'xargs'呼び出しの数を制限するだけです。 find ...; echo "onemore.tgz")| xargs ... ' – bobah