業務中に書いたシェルスクリプトの中で、役にたちそうなものをメモしておきます。
今後も適宜追記していきたいと思います。
(CentOS 6.5で動作確認を行っています)
テキストファイルに記載された大量のコマンドを並列で実行する
例えば以下のように、テキストファイル(ここではcommand.sh)の1行1行に同様の処理が数万回記載されているとします。
command.sh
echo "hoge"; echo "foo"; echo "bar"
×10000
※ここでは説明を簡単にするためにechoコマンドを使っていますが、実際にはより複雑な処理を想定しています。
このまま
sh command.sh
と実行すると、1行ずつ直列的に処理されていくため、場合によってはものすごく時間がかかってしまう可能性があります。
しかし以下のやり方であれば、並列で処理が実行され、かなりのスピードアップが期待できます。
cat command.sh | xargs -P4 -i sh -c '{}'
※xargsの-PにはCPUのコア数、ロードアベレージ等の状況に応じて、適切な値を設定します。
ディレクトリAにある、名前が"hoge_"で始まるCSVファイルをディレクトリBへコピーする
よくありがちなfindとcpを組み合わせたものですが、業務で頻出のパターンなのでメモしておきます。
find /usr/local/A -name "hoge_*.csv" | xargs -i cp {} /usr/local/B