このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】次のコマンドの引き数に渡して実行する:xargsコマンド

xargsコマンドの概要

 「xargs」コマンドは、標準入力から読み取ったデータを引数として他のコマンドに渡して実行するためのツールです。特に、前のコマンドの出力を次のコマンドに引数として渡す際に使用されます。これにより、複雑なパイプラインを構築して効率的にデータを処理することが可能となります。

主なオプションと説明

オプション説明
-n一度に渡す引数の数を指定します。例:-n 1 で1つずつ引数を渡します。
主なオプションと説明

コマンドの使用例と解説

まず、誤ったコマンドの使い方について解説しておきます。

ファイルの作成:file1 file2 file3

ファイルを3つ作成しておきます。file1、file2、file3という名前のファイルを作成します。

・「date | tee file1 file2 file3」コマンドを実行して、「ls」コマンドで作成されたファイルを確認します。

user01@ubuntu-vm:~$ date | tee file1 file2 file3
2024年  5月 26日 日曜日 00:15:02 JST
user01@ubuntu-vm:~$ ls
file1  file3  ダウンロード  デスクトップ  ビデオ    ミュージック
file2  snap   テンプレート  ドキュメント  ピクチャ  公開

失敗例

・「echo "file1 file2 file3" | rm」コマンドを実行

 このコマンドは、「echo」コマンドの出力をパイプを使って「rm」コマンドに渡しています。しかし、「echo」コマンドの出力を直接「rm」コマンドの引数として渡すことができません。その結果、「rm」コマンドは「rm: オペランドがありません」とエラーが出力されます。

user01@ubuntu-vm:~$ echo "file1 file2 file3" | rm
rm: オペランドがありません
詳しくは 'rm --help' を実行して下さい。

そこで、「xargs」コマンドで、「echo」コマンドの出力を受け取るようにします。

・「echo "file1 file2 file3" | xargs rm」コマンドを実行して、ファイルが削除されたかを「ls」コマンドで確認します。

xargs」コマンドで「echo」コマンドの出力を受け取ることで、「rm」コマンドの引数として渡されるため、file1、file2、file3の3つのファイルが削除されます。

user01@ubuntu-vm:~$ echo "file1 file2 file3" | xargs rm
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック

「-n」オプションの使用

再度、ファイルを3つ作成しておきます。file1、file2、file3という名前のファイルを作成します。

・「date | tee file1 file2 file3」コマンドを実行して、「ls」コマンドで作成されたファイルを確認します。

user01@ubuntu-vm:~$ date | tee file1 file2 file3
2024年  5月 26日 日曜日 00:48:14 JST
user01@ubuntu-vm:~$ ls
file1  file3  ダウンロード  デスクトップ  ビデオ    ミュージック
file2  snap   テンプレート  ドキュメント  ピクチャ  公開

・「echo "file1 file2 file3" | xargs -n 1 rm」コマンドを実行して、ファイルが削除されたかを「ls」コマンドで確認します。

 「-n 1」オプションを使用することで、「xargs」は標準入力から1つずつ引数を「rm」コマンドに渡して実行します。これにより、各ファイルが個別に削除されます。

user01@ubuntu-vm:~$ echo "file1 file2 file3" | xargs -n 1 rm
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック

まとめ

 「xargs」コマンドは、前のコマンドの出力を次のコマンドの引数として渡すために非常に有用です。コマンドの失敗を避けるために適切なオプション(例えば -n)を使用することが重要です。これらの機能を活用することで、より柔軟で効率的なシェルスクリプトを作成することができます。