【Linuxコマンド基礎】xargsがわからない!→基礎中の基礎を解説します。

2021年7月10日

こんにちは。今回はxargsというコマンドを解説していきます。Linuxの参考書で勉強してもイマイチ理解ができない、使いどころがわからないという方多いのではないでしょうか。かくいう筆者もLPIC Level1を勉強していたときは「何に使うんだコレ」と思っていました。

しかしこのコマンド1回覚えてしまうと凄くよく使うコマンドになります。それくらい便利なコマンドなのでより多くの人に知ってもらいたいと思うようになりました。ですのでこの記事ではxargsの基礎をやさしく解説していきたいと思います。

xargsとは(簡単に)

「エックスアーグス」と読みます。一言でいうと、標準入力から受け取った値を引数に渡すコマンドです。これだけの説明だとイメージが沸かないと思いますので、簡単な例で説明します。

事前準備としてインプットとなるファイルを作っておきます。sampleという名前でファイルを作成し、aaaaという文字列を1行だけ入力して保存します。

aaaa

このファイルに記入されたaaaaという値をxargsに渡したいと思います。catでファイルを標準出力に出したものをパイプを使用して標準入力に変換します。xargsは変換した値を受け取ります。

cat sample | xargs
>> aaaa

aaaaと表示されました。xargsがsampleファイルの中身を受け取っていることがわかります。ではせっかくなので受け取った値を何かのコマンド引数として渡してみましょう。touchコマンドに渡して、aaaaという名前のファイルを作成してみます。

cat sample | xargs touch

するとaaaaという空のファイルが作成されます。xargsを通してファイルに入力されていた値をtouchコマンドの引数に渡すことができました。以上、ここまでがxargs基礎の基礎となります。

基礎編 引数を複数渡す

xargsは引数を複数渡すことができます。xargsは標準入力で渡すデータの改行までを一項目とみなします。改行区切りでデータを渡せば複数項目渡せるというわけです。

xargsは受け取ったデータの改行を空白(半角スペース)に変換してコマンドに渡します。つまり複数の引数になるということですね。早速実験してみましょう。

先程のsample.txtに一行追加します。

aaaa
bbbb

2行目にbbbbという文字を追加しました。

今回はcpコマンドを使用して、引数を複数渡せることを確認してみます。今回はファイルコピーをするcpコマンドに渡してみましょう。cpコマンドは引数を2個渡すコマンドで、第一引数にコピー元のファイル、第二引数にコピー先のファイルを指定します。xargsを利用して先程作成したaaaaファイルをcpファイルでコピーし、bbbbファイルという名前で保存してみます。

cat sample | xargs cp

解説していきます。まずはcatとパイプでxargsにsampleファイルの内容を渡しています。その後、xargsはsampleの改行文字を半角スペースに変換してcpに渡します。そして最終的にcp aaaa bbbb が実行され、新たにbbbbファイルが作成されるというわけです。

応用 コマンドを複数回実行させる

引数を複数渡す方法を応用してコマンドを複数回実行させることができます。これができるようになるとxargsの真価がわかり、使いたくなってくるはずです。では解説していきます。

具体的な方法を解説する前に、xargsの性質をもう一つだけ覚えてください。その性質とは以下です。

xargsが渡した引数の数がコマンドが受け付ける引数の上限を超えた場合、コマンドを再度実行し残りの引数を順番に渡す。渡す引数が無くなるまでこの動作を繰り返す。

この性質をtouchコマンドに当てはめてみましょう。touchコマンドは引数を1つとることができるコマンドです。従って、xargsでN個の引数を渡すと、touchはN回実行されるということです。

いかがでしょうか。xargsの性質をうまく利用するとループ処理が実現でき、一括で色々な処理をすることができるのです。

では早速実験してみましょう。今度はsample2というファイルを作成し、中身を次のように編集します。

yyyy
xxxx
zzzz

3行のテキストが出来上がりました。このファイルの値をxargsを通じてtouchに渡すことで、ファイルを3つ作成します。

cat sample2 | xargs touch

3ファイルつくることができましたか?いかがでしょう。xargs色々使えそうだなと思ってもらえたら嬉しいですね。

では最後にxargsでよく使うコマンドをいくつか紹介して終わりたいと思います。

応用 役に立つ使い方

findと組み合わせる

とにかくfindと一緒に使うことが多いです。相性抜群です。

検索したファイルの中から任意の文字列を検査する

find . -type f | xargs grep [検索する文字列]

検索したファイルを一括削除する

find -name [ファイル名] | xargs rm

まとめ

いかがでしょうか。今回はxargsについて初心者向けの解説をしました。なんとなく取っつきにくい印象のあるxargsですが、使えそうだなと思っていただけたら幸いです。今後も更に便利な使い方を解説していきたいと思います。

Linux

Posted by kobainmac