xargsの使い方

はじめに

知っている人は当たり前に使うけれど、知らない人にはとっつきにくいと話題(私の中で)の xargs
そんなxargsの使い方を簡単に解説します。

「xargsなんか知ってるよ」という人には全く役に立たない記事なのでご注意。

使い方の解説

「man見ればいいじゃない (以下のリンク先参照)」
Man page of XARGS
と、言って冷たく突き放してもいいんですが、せっかくなんでわかりやすく解説しましょう。

まずは、以下の操作を見てください。

$ echo 111 > 1.txt
$ echo 222 > 2.txt
$ echo 333 > 3.txt
$ ls *.txt
1.txt  2.txt  3.txt

3つのテキストファイルを作成して、lsで表示させてるだけです。
(これが理解できない人は、回れ右して引き返したほうが無難です。)

では、「今作った "1.txt 2.txt 3.txt" の3つを結合してください。」
と、言われたら、あなたはどうしますか?

一番、簡単なのは、以下のように cat を使う方法でしょうかね。

$ cat 1.txt 2.txt 3.txt 
111
222
333

注:
実は、cat はファイルを結合するのが、本来の用途だったりします。(manにもそう書いてある。)
そして、注目は、catは複数のファイル名を指定して、そのすべてを一度に連結できる。ということです。

さて、3つのファイルの連結は簡単です (catに3つのファイル名を指定するだけ。)
が、100個ファイルの連結だったらあなたはどうしますか?
cat に 100個のファイル名を引数で指定しますか?
面倒ですよね?

じゃあ、 xargs を使いましょう。
以下、その操作 (3つのファイルの結合例)

$ ls *.txt
1.txt  2.txt  3.txt
$ 
$ ls *.txt | xargs cat
111
222
333

ね?ちゃんと結合できてますよね。
この操作は実は、最初にやった

$ cat 1.txt 2.txt 3.txt 

と、全く同じなんです。

つまり、一言で言うと、
「xargs は、標準入力で受け取ったデータを、コマンドの引数に展開する。」
これだけのことなんです。(端折り過ぎだと怒られるかもしれませんが。。。)

上のcatの例で言うと、
「標準入力でファイル名の一覧(一覧と言いつつ3つしかないけど)を受け取る。」
「それを、catの引数に、一つづつ展開する。」
「一覧を、すべて引数に展開したら cat 実行。」

xargsは、こういう動きをしてるわけですが、どうです?理解出来ますか?

実は、これは、xargsの使い方としては、一番の初歩です。
xargsのオプション指定をうまく使うと、もっといろんなことができます。
ですが、基本はこういうものだとわかっていれば、応用するのはそんなに難しくないです。

まとめ

誤解を恐れずに簡単にまとめると、

  • Unix/Linuxのコマンドは、引数で複数のパラメータを指定できる場合が多い。
    (cat だとファイル名をたくさん指定できる、とかね。)
  • そういうコマンドに対しては、xargsを使ってパラメータ指定を楽することができる。
  • しかし、xargsの用途はそれだけにとどまらないので、自分で応用できるようになると楽しいよ。

てところでしょうか。
以上、簡単な 「xargsの使い方」 でした。