【Linux】xargsコマンドの使い方|findやgrepと組み合わせた実用例

【Linux】xargsコマンドの使い方|findやgrepと組み合わせた実用例

PRAmazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:2,010

Linuxのxargsコマンドの基本的な使い方から、findやgrepと組み合わせた実用的な活用例まで解説します。ファイルの一括処理や削除など、現場でよく使うパターンを具体的なコマンド例と一緒に紹介します。

Linuxユーザにお勧めの本 ↗

新しいLinuxの教科書 第2版

難易度
実用性
読みやすさ

一生モノの基礎知識が身につく定番書です。

ゼロからわかる Linuxコマンド200本ノック―基礎知識と頻出コマンドを無理なく記憶に焼きつけよう!

難易度
実用性
習得度

アウトプット重視で記憶に定着しやすい。反復練習でLinux操作が自由自在になります。

エンジニア1年生のための世界一わかりやすいLinuxコマンドの教科書

難易度
実用性
読みやすさ

LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルxargsコマンドは、他のコマンドの出力を引数として別のコマンドに渡すために使います。
findgrepと組み合わせることで、ファイルの一括処理が効率よく行えます。

確認した環境
本記事のコマンドは以下の環境で動作を確認しています。

項目バージョン
OSOS [オーエス]Operating System。基本ソフトウェアUbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューション 24.04.1 LTS
xargsGNU findutils 4.9.0
KernelLinux 5.15.167.4-microsoft-standard-WSL2

xargsコマンドとは

xargsは、標準入力から受け取ったデータを、指定したコマンドの引数として渡すコマンドです。

パイプ(|)でコマンドをつなぐとき、xargsを使うことで次のような場面に対応できます。

  • findで見つけたファイルを一括削除する
  • grepで絞り込んだファイルに一括で処理を適用する
  • 大量の引数を分割して安全にコマンドを実行する

基本構文

構文
コマンド | xargs [オプション] [実行するコマンド]

パイプの左側のコマンド出力が、xargsを経由して右側のコマンドの引数になります。

基本的な使い方

シンプルな例:echoで引数を確認する

まず動作を確認するため、echoに引数を渡してみます。

実行コマンド
echo "file1.txt file2.txt file3.txt" | xargs echo
実行結果
file1.txt file2.txt file3.txt

echoの出力がxargsを経由して、次のechoの引数として渡されます。

findと組み合わせた使い方

xargsの最も代表的な使い方が、findコマンドとの組み合わせです。

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

カレントディレクトリ配下の.tmpファイルを検索して一括削除する方法を紹介します。

注意: rmは元に戻せません。事前にechoで対象ファイルを確認することをおすすめします。

削除前の確認(echoで対象ファイルを表示)
find . -name "*.tmp" | xargs echo

下記コマンドで、.tmpファイルを検索して削除することができます。

削除コマンド
find . -name "*.tmp" | xargs rm

ファイル名にスペースが含まれる場合

ファイル名にスペースが含まれていると、通常のxargsでは正しく処理できません。
その場合はfind-print0xargs-0オプションを組み合わせます。

-print0なしでスペースを含むファイルを渡すと、スペースで分割されてエラーになります。

❌ -print0 なし(ファイル名がスペースで分割されてしまう)
find . -name "*.tmp" | xargs ls
実行結果(エラー)
ls: cannot access './dir1/file': No such file or directory
ls: cannot access 'with': No such file or directory
ls: cannot access 'space.tmp': No such file or directory
./dir1/temp1.tmp
./dir1/temp2.tmp

-print0-0を組み合わせることで、スペースを含むファイル名も正しく処理できます。

✅ -print0 あり(正しく処理される)
find . -name "*.tmp" -print0 | xargs -0 rm

grepと組み合わせた使い方

特定キーワードを含むファイルを一覧取得して処理する

grep -rlで特定のキーワードを含むファイルを検索し、そのファイルに処理を適用できます。

実行コマンド(キーワードを含むファイルの内容を表示)
grep -rl "keyword" ./ | xargs cat

キーワードを含むファイルを一括置換する

grep -rlxargs sedを組み合わせて、対象ファイルのみを一括置換できます。

実行コマンド
grep -rl "keyword" ./ | xargs sed -i "s/keyword/after_keyword/g"

findとsedを組み合わせた一括置換

findで対象ファイルを絞り込み、xargs sedで一括置換する方法もよく使われます。

実行コマンド(カレントディレクトリ配下を一括置換)
find ./ -type f -print | xargs sed -i "s/keyword/after_keyword/g"

特定の拡張子のみを対象にする場合は、find-nameオプションを組み合わせます。

実行コマンド(.txtファイルのみ対象)
find ./ -type f -name "*.txt" -print | xargs sed -i "s/keyword/after_keyword/g"
 【Linux】sedで文字列を一括置換する方法
ITナレッジライフ

【Linux】sedで文字列を一括置換する方法

Linuxのsedとfindを使い、複数ファイルの文字列を一括置換する方法を詳しく解説します。grepでの事前確認や、特定のディレクトリ・拡張子を除外する方法も紹介するので、大量のファイルを効率的に編集したい方におすすめです。

並列実行する(-P オプション)

-Pオプションを使うと、コマンドを並列実行できます。大量のファイルを処理する際に高速化できます。

実行コマンド(4並列で実行)
find . -name "*.log" | xargs -P 4 gzip
  • -P 4:最大4プロセスを並列で実行する

1引数ずつ実行する(-I オプション)

-Iオプションを使うと、引数を1つずつ受け取り、コマンド内の任意の位置に挿入できます。

構文
コマンド | xargs -I {} 実行するコマンド {}

例:ファイルをバックアップディレクトリにコピーする

実行コマンド
find . -name "*.conf" | xargs -I {} cp {} /backup/

{}の部分にfindで見つけたファイル名が1つずつ入ります。

引数の数を制限する(-n オプション)

-nオプションを使うと、一度に渡す引数の数を制限できます。

実行コマンド(2引数ずつ渡す)
echo "a b c d" | xargs -n 2 echo
実行結果
a b
c d

echoコマンドに4つの引数が2つずつ分けて渡され、2行で出力されます。

よく使うオプションまとめ

オプション説明
-0NULL文字を区切り文字として使用(-print0と組み合わせる)
-I {}引数を1つずつ受け取り、{}の位置に挿入する
-n N一度に渡す引数の数をNに制限する
-P N最大Nプロセスを並列実行する
-t実行するコマンドを表示してから実行する(デバッグに便利)
-p各コマンドの実行前に確認プロンプトを表示する

-t オプションの出力例

-tオプションを使うと、実際に実行されるコマンドを確認できます。動作確認やデバッグに便利です。

実行コマンド
find . -name "*.txt" | xargs -t echo
実行結果
echo ./file1.txt ./file2.txt ./file3.txt
./file1.txt ./file2.txt ./file3.txt

1行目が実行されるコマンド(標準エラー出力)、2行目が実際の出力です。

実用例まとめ

1. .tmpファイルを一括削除する

実用例1
find . -name "*.tmp" -print0 | xargs -0 rm

2. キーワードを含むファイルを一括置換する

実用例2
grep -rl "old_text" ./ | xargs sed -i "s/old_text/new_text/g"

3. .logファイルを並列圧縮する

実用例3
find /var/log -name "*.log" -print0 | xargs -0 -P 4 gzip

4. 検索したファイルを別ディレクトリにコピーする

実用例4
find . -name "*.conf" -print0 | xargs -0 -I {} cp {} /backup/

まとめ

  • xargsは標準入力のデータをコマンドの引数として渡すコマンド
  • findと組み合わせてファイルの一括削除・処理ができる
  • ファイル名にスペースがある場合は -print0-0 を使う
  • -I {} で引数の挿入位置を指定できる
  • -P で並列実行して処理を高速化できる

関連コマンド
xargsとよく組み合わせて使うfindコマンドやgrepコマンドの詳しい使い方は以下の記事もご参照ください。

【Linux】再帰的にファイル名を検索する(findコマンド)
ITナレッジライフ

【Linux】再帰的にファイル名を検索する(findコマンド)

Linuxでファイルやディレクトリを検索する際、便利なのがfindコマンドです。本記事では、「再帰的にファイル名を検索する」というテーマに焦点を当てて、findコマンドの使い方やオプションを指定した応用的な使い方を解説します。

【Linux】grepコマンドで再帰的な検索をする方法
ITナレッジライフ

【Linux】grepコマンドで再帰的な検索をする方法

Linuxでファイル内容の再帰的な検索をする場合は、grepコマンドのrオプションを利用します。またlオプションと組み合わせることで、該当ファイルの一覧も取得することができます。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る

Linuxユーザにお勧めの本 ↗

新しいLinuxの教科書 第2版

難易度
実用性
読みやすさ

一生モノの基礎知識が身につく定番書です。

人気記事


記事を評価

Thanks!
目次
Scroll to Top