LoginSignup
13
14

More than 5 years have passed since last update.

xargs -n 1 って関数型言語の map みたいだなと思った

Last updated at Posted at 2014-07-12

今まで↓のように for で回していたんですが

# [git] 'tmp-' で始まるブランチを全て削除
for branch in $(git branch --list "tmp-*" | cut -b 3-); do
    git branch -D $branch
done

xargs -n 1 を使うと↓のように関数型言語の map みたいな感じで書けます。

# [git] 'tmp-' で始まるブランチを全て削除
git branch --list "tmp-*" | cut -b 3- | xargs -n 1 git branch -D

xargs は何も指定しない場合、与えたコマンドの一番最後に引数を追加して呼び出すのですが、コマンドの一番最後以外の場所に引数を指定したい時もあります。そのような場合は -I オプションを使って置換文字列を指定するとよいです。上の例を -I を使って書き直すと以下のようになります。(置換文字列には {} を指定しました)

# [git] 'tmp-' で始まるブランチを全て削除
git branch --list "tmp-*" | cut -b 3- | xargs -n 1 -I{} git branch -D {}

また、-P オプションをつけるとコマンドの並列実行ができます。重いコマンドをたくさん走らせるときには便利かもしれません。

# カレントディレクトリにあるファイルをそれぞれ gzip 圧縮する (4並列)
ls | xargs -n 1 -P 4 gzip -v
13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14