コンテンツにスキップ

GNU parallel

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Momiji-Penguin (会話 | 投稿記録) による 2018年9月27日 (木) 09:34個人設定で未設定ならUTC)時点の版 (en:GNU parallel oldid=841645390 を翻訳)であり、現在の版とは大きく異なる場合があります。

(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
GNU parallel
作者 Ole Tange[1]
開発元 GNUプロジェクト
最新版
20180922 / 2018年9月22日 (6年前) (2018-09-22)[2]
リポジトリ ウィキデータを編集
プログラミング
言語
Perl
対応OS Unix系
サポート状況 開発中
種別 ユーティリティ
ライセンス GNU GPL v3+[1]
公式サイト www.gnu.org/software/parallel/
テンプレートを表示

GNU parallel(グヌー・パラレル)は、Unix系OSコマンドラインユーティリティである。Unixシェル上でコマンド並列実行を可能にする[1]

GNU parallelはOle TangeによってPerlで書かれ、GNU GPL v3+リリースされている[1]

使用方法

GNU parallelの紹介(パート1)
GNU parallelの紹介(パート2)

最も一般的な使用方法は、シェルスクリプトfor文の置き換えであり、以下はその例である。

for x in $(cat list) ; do
    do_something "${x}"
done | process_output

このコマンドは以下のように置き換えることができる。

cat list | parallel do_something | process_output

do_something引数となるファイルの一覧(list)は、パイプによって入力される。また、process_outputが空の場合がある。

GNU parallelを使用するスクリプトは、pexec英語版を使用するスクリプトよりも可読性が高いものになる。

GNU parallelでは、以下のような処理が行われる。

デフォルトでは、CPUコア数と同数のジョブが並列実行される。

実行例

find . -name "*.foo" | parallel grep bar

上記のコマンドは以下のコマンドと同等である。

find . -name "*.foo" -exec grep bar {} +

これらのコマンドは、カレントディレクトリとサブディレクトリの名前が『.foo』で終わる全てのファイルとディレクトリを検索し、その中で名前に『bar』を含むものを更に検索するものである。parallelは、ファイル名改行が含まれていない限りは正常に動作する。ファイル名に改行が含まれている場合は以下のコマンドによって問題を回避する。

find . -name "*.foo" -print0 | parallel -0 grep bar

上記のコマンドは、ヌル文字によってファイル名を区切っている。

find . -name "*.foo" | parallel -X mv {} /tmp/trash

上記のコマンドは、引数の位置を{}によって変更している。

find . -maxdepth 1 -type f -name "*.ogg" | parallel -X -r cp -v -p {} /home/media

上記のコマンドは以下のコマンドと同等である。

cp -v -p *.ogg /home/media

上記のコマンドよりもfindparallelcpを使用している実行例の方がリソース効率がよく、『*.ogg』に一致するファイルが膨大な場合に発生するシェルへの過負荷によるエラーを防ぐことができる。

脚注

  1. ^ a b c d GNU Parallel”. Free Software Foundation. 2018年9月27日閲覧。
  2. ^ Tange, Ole (22 September 2018). "GNU Parallel 20180922 ('Danske') released [stable]". parallel (Mailing list). 2018年9月27日閲覧

関連項目

外部リンク