基本的なこと
xargsは、標準入力から受け取った文字列を、指定したコマンドの引数として渡すためのコマンドです。
通常、パイプ(|)を使って別のコマンドの出力を別のコマンドの入力として渡すことができますが、多くのコマンドは標準入力から引数を受け取るように設計されていません。xargsは、このギャップを埋める役割を果たします。
例えば、findコマンドは多数のファイル名を標準出力にリストアップしますが、それらのファイルをrmコマンドで削除したい場合、rmコマンドは引数としてファイル名を受け取るため、find ... | rmと直接つなぐことはできません。ここでxargsを使用することで、findの出力をrmの引数として渡すことができます。
主な機能:
標準入力から受け取ったデータを、指定されたコマンドの引数に変換する。
大量のファイル名などを一度に処理することで、コマンドの実行回数を減らし、効率を向上させる。
よく使うコマンド(オプション)
-I (置換文字列): 標準入力から受け取った各行を、指定した置換文字列(例: {})に置き換えてコマンドを実行します。これにより、引数をコマンドの中間に配置することが可能になります。
例: ... | xargs -I {} mv {} /path/to/destination/
-n (最大引数): 指定した数(例: 50)の引数をまとめてコマンドに渡します。デフォルトでは、できるだけ多くの引数を一度に渡そうとします。これにより、コマンドを複数回に分けて実行できます。
例: ... | xargs -n 50 ls -l
-p (確認プロンプト): 各コマンドを実行する前に確認プロンプトを表示します。危険な操作(rmなど)を行う前に、実行内容を確認したい場合に役立ちます。
例: ... | xargs -p rm
-t (トレース): 実際に実行されるコマンドを標準エラー出力に表示します。デバッグに便利です。
-r (空入力時実行なし): 標準入力が空の場合、コマンドを実行しません。
-0 (null区切り): 入力データをnull文字(\0)で区切ります。ファイル名にスペースや改行が含まれている場合に安全に使用できます。find -print0と組み合わせて使うのが一般的です。
使用例
1.findコマンドと組み合わせてファイルを削除する
findはファイル名にスペースや特殊文字が含まれる可能性があるため、-print0と-0オプションを組み合わせて安全に実行するのが推奨されます。
# 「.log」で終わるファイルをすべて削除する
find . -name "*.log" -print0 | xargs -0 rm
2.grepで検索したファイルを別のコマンドに渡す
grepで特定の文字列を含むファイルを検索し、そのファイル名をtarコマンドに渡してアーカイブを作成します。
# 「TODO」を含むすべてのファイルを検索し、そのファイルをarchive.tar.gzにまとめる
grep -r -l "TODO" . | xargs tar -czvf archive.tar.gz
3.-Iオプションを使ってコマンドの中間に引数を渡す
mvコマンドを使って、ファイル名を変更する際にxargsの-Iオプションを使います。
# .jpgファイルをすべて.JPGにリネームする
find . -name "*.jpg" | xargs -I {} mv {} {}.JPG
この例では、findの出力(.jpgファイル名)が{}に置き換わってmvコマンドが実行されます。
xargsは、コマンドラインで複数のコマンドを連携させる際に非常に強力なツールです。
1891年 ヴィクトリア朝のシャーロックホームズの世界に3名の生成AIが突如現れる。
現代社会の不可思議なビジネス課題をこの3名の生成AIが謎に迫る
- ビジネスコンテンツ × ミステリー × 生成AIの世界観をお楽しみください。
- ROI探偵事務所の事件で使用した知識をこちらに掲載しています
