はじめに
こんにちは!今回はxargsコマンドについて解説します。
xargsは標準入力から引数を構築して、別のコマンドに渡すコマンドです。findやgrepの結果を他のコマンドで処理したり、大量のファイルを一括操作したり、日々の運用を効率化する強力なコマンドですね。
「パイプの後ろでファイル名を受け取る」って感じです。実は複雑に見えますが、慣れると超便利ですよ。
xargsコマンドとは
xargsは、標準入力から読み込んだ行をコマンドの引数に変換して実行する外部コマンドです。
通常のパイプ(|)は標準入力としてテキストを受け渡しますが、xargsはそれをコマンドの引数に変換します。find、grep、echoなどの結果をファイル名として他のコマンドに渡したい場合に非常に便利。大量のファイル操作を効率的に行えます。
基本構文
|
|
標準入力から引数を読み込んで、指定したコマンドに渡します。デフォルトでは標準入力の各行が引数になります。
主なオプション
| オプション | 説明 |
|---|---|
-I {} |
占有文字列(デフォルト: スペース区切り) |
-n NUM |
1回に渡す引数の最大個数 |
-d DELIM |
区切り文字を指定(デフォルト: スペース/改行) |
-0 |
NUL文字で区切られた入力を処理 |
-p |
実行前に確認を取る(prompt) |
-r |
標準入力が空の場合は実行しない |
-t |
実行するコマンドを表示 |
--no-run-if-empty |
入力がない場合は実行しない |
使用例
例1: findの結果をrmで削除
|
|
実行結果:
|
|
最も一般的な使い方。findで見つけたファイルをrmで一括削除。
例2: 確認付きで削除(-p オプション)
|
|
実行結果:
|
|
-pで実行前に確認。危険な操作の時に便利。
例3: echoで渡したファイルをcatで表示
|
|
実行結果:
|
|
複数ファイルの内容を連続表示。
例4: 1回の実行で1つの引数のみ(-n 1)
|
|
実行結果:
|
|
-n 1で1回に1つの引数だけ渡します。
例5: 複数の引数をまとめて渡す(-n NUM)
|
|
実行結果:
|
|
-n 2で2つずつ渡します。cpやrmで複数ファイル処理に便利。
例6: grepの結果を処理
|
|
実行結果:
|
|
「error」を含むログファイルを見つけて、行数をカウント。
例7: 占有文字列(-I)を使った置換
|
|
実行結果:
|
|
-I {}で{}を引数に置換。複雑な処理に便利。
例8: -Iで複数ファイルコピー
|
|
実行結果:
|
|
占有文字列を使ったコピー例。ファイル名の保持が簡単。
例9: findとxargsの強力な組み合わせ
|
|
実行結果:
|
|
ログファイルのサイズを表示。
例10: NUL区切り入力(-0)でスペースを含むファイルに対応
|
|
実行結果:
|
|
スペースを含むファイル名も正しく処理。
例11: 入力がない場合の処理(-r)
|
|
実行結果:
|
|
-r(–no-run-if-empty)でマッチなしの場合は実行しない。
例12: 実行内容を確認(-t)
|
|
実行結果:
|
|
-tで実行するコマンドを表示してから実行。
Tips・注意点
findとxargsの組み合わせは必須
|
|
findとxargsを使う場合はスペース対策を。
スペースを含むファイル名への対応
|
|
スペースを含むファイル名がある場合は-print0と-0の組み合わせが最適。
複雑な処理は占有文字列(-I)を使う
|
|
引数を複数の場所で使う場合は-I。
危険な操作は必ず-pで確認
|
|
削除やアーカイブなどの危険な操作は確認を。
実践的な使い方
古いログファイルを圧縮
|
|
30日以上前のログファイルをgzipで圧縮。ディスク容量を節約。
重複ファイルを削除
|
|
バックアップファイルを一括削除。
パーミッション変更
|
|
すべてのシェルスクリプトに実行権限を付与。
複数ファイルの検索・置換
|
|
すべてのテキストファイルで「old」を「new」に置換。
バックアップ作成
|
|
設定ファイルをバックアップ。
まとめ
xargsコマンドのポイント:
- 標準入力から引数を構築して別のコマンドに渡す
- -I {}: 占有文字列で複雑な処理に対応
- -n NUM: 1回に渡す引数数を制限
- -p: 実行前に確認
- -0: NUL区切りでスペース対応
- -r: 入力がない場合は実行しない
- -t: 実行内容を表示
- findとの組み合わせで超強力
- よく使う組み合わせ:
find | xargs,grep -l | xargs,ls | xargs -I {}
find、grep、xargsの組み合わせは実務のコマンドライン操作の中核。使いこなせると作業が飛躍的に効率化されますよ!