「分かりそう」で「分からない」でも「分かった」気になれるLinuxコマンド辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるLinuxコマンド辞典

xargs

スポンサーリンク

何するコマンド?

引数標準入力から与えるときに使うコマンド



書き方

xargs [オプション] [コマンド[引数]]



オプション

オプション説明
-a 【ファイル名】標準入力ではなく【ファイル名】から読み込む
-0ヌル文字で区切る
-d【デリミタ【デリミタ】で区切る
-E【文字列】【文字列】をファイル終端文字として設定する。【文字列】が登場したら、それ以降の入力は無視する。
-I【文字列】[引数]の中の【文字列】を標準入力から読み込んだものに置き換える
-L【数字】1コマンドに最大【数字】行読み込む。読み込み行数が【数字】行に達する度にコマンドを実行するよ
-n【数字】最大【数字】個の引数を取る。引数が【数字】個に達する度にコマンドを実行するよ
-p1行ごとに「実行する?」って確認してくる
-r標準入力に空白しか含まれていない場合は、指定したコマンドを実行しない。
-s【数字】1つの[コマンド[引数]]につき最大【数字】文字使う
-t実行する内容を標準エラー出力出力する
-x[コマンド[引数]]の長さが上限を超えていたら終了する(-sオプション参照)
-P【数字】最大【数字】個のプロセスを同時実行する

補足事項

例えば

xargs ls

と打ちます。
そうすると入力待ち状態になりますので「hoge.txt」と入力して「Ctrlキー」+「d」を押します。

この実行結果が

ls hoge.txt

と同じになるのです。
「ls」コマンドの引数を標準入力から受け取った形です。

「xargs」の使い所はいろいろありますが、単独で使われることはまずありません。
例えば

more list.txt |xargs more

のように他のコマンドと組み合わせて使います。
この例では「list.txt」の中にファイル名の一覧が記載されているのですが、そのリストに記載されているファイルの中身を表示します。

more list.txt

の結果が例えば

aaa.txt
bbb.txt
ccc.txt


になるとして「|xargs more」の部分で「more」コマンドの引数として上記結果が与えられます。
つまり

more aaa.txt
more bbb.txt
more ccc.txt

を同時に実行したのと同じ扱いになるのです。
使いこなせれば便利そうなコマンドですね。

あっ、そうそう。
ついでなので「-I」オプションの解説もしておきますね。
よく分からないけど分かれば便利、それが「-I」オプションです。

「-I」オプションは「指定文字列を標準入力から読み込んだものに置き換える」オプションですが、言葉で聞いてもよく分からないかもしれません。
実際に例を挙げると、例えばこんな感じの使い方をします。

more list.txt |xargs -Irs cp rs hoge_dir/

「-Irs」の「rs」が指定文字列です。
その後ろに「cp rs hoge_dir/」があると思いますが、この「cp rs hoge_dir/」の「rs」を標準入力から読み込んだもの、今回はlist.txtの中身に置き換えますよ~ということです。
このコマンドを実行するとlist.txtの中に記載のあるファイルをすべてhoge_dir/の中にコピーしてくれますよ。

cp aaa.txt hoge_dir/
cp bbb.txt hoge_dir/
cp ccc.txt hoge_dir/

を同時に実行したのと同じ扱いです。

「xargs」コマンドは慣れるまでが大変ですが、慣れるとかなり便利です。
気が向いたら、いろいろ試してあげてください。

スポンサーリンク


書籍画像