知らないとヤバイ。xargs(エックスアーギュス)コマンドの使い方を丁寧に解説


基本

動画はこちらから(画像クリックでyoutubeへ)
lessコマンドの使い方。catだけだときついよ【linux コマンド】

xargsコマンド

標準入力やファイルからリストを読み込んで,実行したいコマンドの引数として渡せる!
ちなみに読み方は「エックスアーギュス」とが一般的。argumentsの略なので、アーギュメンツからアーギュをとっている(多分)

オプション

  • -p : 実行前に確認する
  • -L : 指定した数の引数で実行する
  • -I : 指定した位置に引数を渡せる (他にもあるが、覚えるのはこれだけで十分)

appendix

  • -Iオプションでは必ず一つずつ実行されるので-Lは使えない
  • backquoteでも同じようなことができる

sample サンプルコマンド

  • ls | xargs wc
  • find . -name "*.txt" | xargs wc
  • ls | xargs -L 1 wc
  • ls | xargs -L 3 wc
  • ls | xargs -p -L 3 wc
  • ls | xargs -I{} wc {}
  • wc `ls`
  • wc aaa.txt
  • ls | wc
  • ls | cat

実際にコマンドを打ってみる

二つのファイルを用意する。

[bitnami@ /tmp/com_xargs]$ ls
aaa.txt  bbb.txt

中身はこんなかんじ

[bitnami@ /tmp/com_xargs]$ cat aaa.txt bbb.txt
asdf
qwer
34

qweriu
qweuf
werpoi

たとえばこんな感じでコマンドを打ってみる。

[bitnami@ /tmp/com_xargs]$ ls | xargs wc
 4  3 14 aaa.txt
 3  3 20 bbb.txt
 7  6 34 total

これは、aaa.txtとbbb.txtに対してwcコマンドを打ったのと同等。
つまり、「lsの結果をwcコマンドに渡すことができる」

一応-pオプションでどういうコマンドが実行されているのか確認してみる。

[bitnami@ /tmp/com_xargs]$ ls | xargs -p wc
wc aaa.txt bbb.txt ?...

見ての通り、「wc aaa.txt bbb.txt ?...」と書かれている。たしかにwcコマンドの引数としてlsの結果を渡せていることがわかる。ここでyを入力してenterを押すと、実行される。
(-pオプションはデバッグに便利なのでぜひ覚えたいところ)

ちなみに、もしxargsを使わずにうつと、こうなってしまう。

[bitnami@ /tmp/com_xargs]$ ls | wc
      2       2      16

これはどういうことかというと、以下の結果を直で(つまりaaa.txtとbbb.txtと書かれたファイルと考えるとわかりやすい)wcコマンドに渡しているとかんがえることができる。

(ちなみにwcコマンドの意味は左から、行数、単語数、バイト数)

[bitnami@ /tmp/com_xargs]$ ls | cat
aaa.txt
bbb.txt