このエントリーをはてなブックマークに追加

xargs のちょっとした Tips

xargs を使うと手軽にコマンドを並列実行できて便利ですが、xargs を使ったいくつかのちょっとした Tips を紹介したいと思います。

基本は、次のようなになります。


$ echo a"\n"b | xargs -t -P 2 -n 1 echo "command"
echo command a
command a
echo command b
command b

この例だと、”command (a|b)” を表示するコマンドになりますが、echo をとることで任意のコマンドの末尾に自由にパラメータを渡すことができます。

末尾ではなく、コマンドの途中のパラメータを渡したいときは、次のようにするとできます。


$ echo -e a"\n"b | xargs -t -P 2 -n1 -I '{}' echo "command {} param2"
echo command a param2
command a param2
echo command b param2
command b param2

-I オプションを使うと、任意のパラメータに置換することができます。上の例だと、{} になります。xargs に渡すパラメータが改行区切りでないといけないので注意してくさい。
そのままやってしまうと、次のようになります。


$ echo a"\n"b | xargs -t -n1 -P 2 -I '{}' echo "{} command"
echo a b command
a b command

ちゃんとコマンドを並列実行する場合は、GNU Paralell を使うのが定番ですが、インストールする必要があるので、お手軽にやりたいときには xargs を使うと便利です。

# 10/19 追記
コメントにあった指摘で、-P オプションを付与するように修正しました。

2 Comments

  • ほげ

    Wednesday, 10/19/2016

    xargsは並列実行するのでしょうか?
    echo command aが終了した後に
    echo command bが実行される認識でしたが。

  • naoya

    Wednesday, 10/19/2016

    コメントありがとうございます。
    すいません、記事内容が少しおかしかったですね、-P オプションを指定すると並列実行実行になりますので、記事を訂正させていただきました。

Comments are closed.