hollyさんのwiki

並列処理プログラム。xargsでもできるけどかなり高機能なので一度試してみた。http://www.gnu.org/software/parallel/

GNU Parallel作者が書いたParallel:The Command-Line Power Toolを読んだはちょっとわかりやすい

install

yumで管理する
# rootで
cd /etc/yum.repos.d
curl -L http://download.opensuse.org/repositories/home:/tange/CentOS_CentOS-5/home:tange.repo
sed -i -e 's/^\(enabled\)=1/\1=0/' home\:tange.repo

yum install --enablerepo=home_tange parallel

使い方

とにかくオプションが多いし、よくわからないので例をみるほうがよさそう

option

よく使いそうなのだけまとめておく。xargsになんとなくにてる
option意味
-j, --jobsいろいろ意味がありそうなので、詳細はmanをみること。-j+0(CPU コアの数まで可能な限りのジョブを実行)と-j1(forとかwhileと同じ)を覚えておけばよさそう。+, -をつける、つけないで意味がかわるようだ
:::引数リスト
::::引数リストファイル
-a, --arg-file::::と同じ
{}引数を実行するコマンドで実行する文字列に置換される
{.}{}と同じだが拡張子が除外される
{/}{}と同じだがbasenameの結果
{//}{}と同じだがdirnameの結果
{/.}{.}と{/}の効果
{#}job number
{n}こういうことがしたいとき→parallel echo {1} {2} {3} ::: 1 2 3 ::: 4 5 6 ::: 7 8 9
{n.}{n}と{.}
{n/}{n}と{/}
{n/}{n}と{/.}
--progress進捗状態を表示
--dry-run実行は行わない
-0, --nullfind -print0 とかで渡すときの組み合わせ
-uバッファリングしない
-X実行するコマンドが可能な限りの数の引数をとれるようする。-mも同じような意味っぽいがよくわからない
--sshloginremote serverで指定したコマンドを実行する。,区切りで複数指定可能。オプションによる複数指定も可
--transferファイル転送。sshloginと組み合わせる
--return指定にマッチしたファイルをローカルにもってきてリモートからは削除。と思う。transferと組み合わせる
--cleanup転送したファイルを削除。と思う。transfer、returnと組み合わせる

サンプル

ファイルを全てgzip圧縮する
parallel -j+0 gzip ::: *.txt
ゴミ箱に移動
parallel -j+0 -X mv {} ~/.Trash ::: *.txt
リストに基づいてcurlする
cat urllist
http://www.yahoo.co.jp
http://www.google.co.jp
http://www.livedoor.com

parallel -j+0 curl -L -o /dev/null :::: urllist
拡張子変換
find -name "*.txt" -print0  | parallel --dry-run -0 mv {} {.}.html
shellスクリプトをparallelで実行
なんとなくグループごとに判断してくれるところが非常にいい
cat shell
ping -c 5 www.google.co.jp
curl -L http://www.google.co.jp >/dev/null
ping -c 5 www.yahoo.co.jp
curl -L http://www.yahoo.co.jp >/dev/null

parallel -j 1000% < shell
タグ

Wiki内検索

Menu

ここは自由に編集できるエリアです。

管理人/副管理人のみ編集できます