本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第8回 | 複数の結果を次のコマンドへ渡す | xargs で作業をつなげる基本|ターミナル仕事術

ターミナル仕事術 | 第8回
ターミナルで作業していると、一覧として出てきた結果を「このあと別のコマンドにも使いたい」と思う場面が増えてきます。1つずつ手で打ち直しても進められますが、件数が増えるほど面倒になり、打ち間違いも起きやすくなります。
今回は、そんな「複数の結果を次のコマンドへ渡す」ための基本として、xargs の役割を整理します。前回のパイプの考え方を一歩進めて、結果をそのまま次の作業につなげる感覚を見ていきましょう。
動画で流れを先に見たい方は、UNIX Cafe の YouTube もあわせてどうぞ。記事と同じく、初心者向けのやさしい流れで 、ターミナルの最初の一歩を確認できます。
📝 この記事で学べること
xargsが何をしているのか- パイプだけでは足りない場面で、なぜ役立つのか
- 複数の結果をまとめて次へ渡す考え方
- 探す、読む、処理する流れの中でどう使えるのか
xargs は「流れてきた結果を、次のコマンドの引数にする」道具
xargs は、標準入力で受け取った文字列を、次のコマンドに渡すための道具です。少し難しく聞こえますが、一言で言えば「流れてきたリストを、コマンドが使いやすい形に整える役」です。
前回学んだパイプは、あるコマンドの結果を次のコマンドへそのまま流す仕組みでした。xargs はその間に入り、「流れてきた結果を、次のコマンドが扱える対象として並べる」役割を担います。
ここで出てくる「引数(ひきすう)」という言葉が気になった方へ。
引数とは、コマンドに渡す「対象」や「設定」のことです。ls Documents の Documents、cat memo.txt の memo.txt がそれにあたります。xargs は、この引数の部分を自動で組み立ててくれます。
| 要素 | 役割 | 見方 |
|---|---|---|
パイプ | | 前の結果を次へ流す | 結果をつなぐ |
xargs | 流れてきた結果を引数に並べ直す | 対象に変える |
| 次のコマンド | 実際の処理を行う | 読む、表示する、操作する |
なぜ xargs が必要になるのか
一覧の結果を見て、「この全部に同じことをしたい」と思う場面はよくあります。見つけたファイルをまとめて表示したい、複数の対象に同じ処理を実行したい——そんなとき、1件ずつ手で入力し直すのは非効率です。
xargs は、この「一覧として出てきた結果」を「次のコマンドが受け取りやすい引数の並び」に変えてくれます。難しいオプションを覚える前に、まずはここだけ押さえてください。
パイプだけでは足りない理由
コマンドによって「受け取り方」が違います。grep や sort のように、流れてきたテキストをそのまま処理できるコマンドはパイプだけで動きます。一方 cat や ls は「ファイル名を引数として受け取る」設計なので、パイプで直接つないでも期待通りに動きません。xargs はこのギャップを埋めます。
✔ ポイント
xargs の価値は、「手作業で1件ずつ繰り返す」を「まとめて次へ渡す」に変えられることです。最初は構文を暗記するより、この価値を理解するほうが大切です。
まずは考え方だけを短い例で見る
次の例では、2つのファイル名を流して、cat に渡しています。
$ printf "memo.txt
todo.txt
" | xargs catprintf が出した2つの名前を、xargs が受け取り、cat memo.txt todo.txt のような形にして実行します。つまり、ただの文字列の並びを、cat が扱える「対象の一覧」に変えているわけです。
このコマンドが内部でやっていること
printf "memo.txt\ntodo.txt\n"が、2行のテキストを出力する(\nは改行を意味します)- パイプ
|がその出力をxargsへ流す xargsがmemo.txttodo.txtという2つの単語を受け取り、cat memo.txt todo.txtというコマンドを組み立てて実行する
自分でコマンドを組み立てて実行する、というのが xargs の核心です。ファイルが2つなら手で打てばいいですが、10個・100個になれば手作業では限界が来ます。そこで xargs の出番です。
探した結果を、そのまま次の処理へつなげる
xargs は、これまで学んできた「探す」「読む」と自然につながります。
$ find . -name "*.txt" | xargs ls -lこの例では、find で見つけた .txt ファイルを、ls -l の対象としてまとめて渡しています。見つけて終わりではなく、見つけた結果をそのまま次の確認へ進められるところが便利です。
各パーツの意味も確認しておきましょう。
| パーツ | 意味 |
|---|---|
find . | 現在のディレクトリ(.)以下を再帰的に探す |
-name "*.txt" | 名前が .txt で終わるファイルに絞る |
| xargs | 見つかったファイル名の一覧を xargs へ流す |
ls -l | 各ファイルの詳細情報(サイズ・更新日時など)を表示する |
たとえば find が ./memo.txt と ./notes/todo.txt を見つけた場合、xargs は ls -l ./memo.txt ./notes/todo.txt というコマンドを自動で組み立てて実行します。何件あっても、この仕組みは変わりません。
⚠️ 注意
xargs は、受け取った文字列を区切って引数に変換します。最初のうちは、空白を含まないシンプルなファイル名で試すのが安全です。細かな区切りの扱いは、慣れてからで大丈夫です。
初心者がつまずきやすいポイント
- ファイル名に空白が含まれる場合:
my file.txtのような名前は、xargsに「my」と「file.txt」という別々の引数として認識されてしまいます。空白入りのファイル名を扱うにはfind -print0 | xargs -0という書き方が必要ですが、最初は空白なしのファイル名で練習するほうが混乱しません。 - 結果が0件のとき:
findなどで何も見つからなかった場合、xargsはデフォルトで引数なしのコマンドを実行しようとします。xargs -r(またはmacOSでは動作が異なる場合あり)を付けると、0件のときは何もしないよう制御できます。
パイプとどう違うのか
パイプは「前の結果をそのまま次に流す」考え方です。対して xargs は「流れてきた結果を、次のコマンドの引数に変える」考え方です。ここを区別しておくと、この先で迷いにくくなります。
パイプだけではつながらない場面で、間を取り持つのが xargs の役割です。応用に見えますが、やっていることはシンプルです。
具体的な例で比べてみましょう。grep はパイプで直接つなげます。なぜなら、前のコマンドが流してきたテキストをそのまま処理できるからです。
$ cat memo.txt | grep "TODO" # これはパイプだけでOK一方、ls は「ファイル名を引数として受け取る」設計なので、パイプだけでは意図通りに動きません。こういう場面で xargs を挟みます。
$ find . -name "*.txt" | ls -l # ❌ 意図通りに動かない
$ find . -name "*.txt" | xargs ls -l # ✅ xargs を挟むと正しく動く| 見方 | パイプ | xargs |
|---|---|---|
| 役割 | 結果を次へ流す | 結果を引数に変える |
| 向いている場面 | 次のコマンドが標準入力を受け取れるとき | 次のコマンドが引数を必要とするとき |
| 感覚 | 流れを作る | 対象を並べる |
繰り返し作業をまとめる感覚が大事
この回で大事なのは、細かなオプションを覚えることではなく、「複数の結果を、まとめて次へ渡せる」という考え方に慣れることです。
ターミナルの仕事では、1つのコマンドを深く知ることより、探す・読む・絞る・渡す、という流れを作れることのほうが重要です。xargs はその流れをひとつ先につなげてくれます。
流れで見ると分かりやすい
- まず結果の一覧を出す
- その一覧を
xargsで次のコマンドの対象に変える - 読む、表示する、確認するなどの処理を続ける
この流れが見えてくると、ターミナルのコマンドは単発の知識ではなく、少しずつ連携する道具に見えてきます。
💡 ヒント
xargs を最初に学ぶときは、「オプションを覚える」より「どんな場面で1件ずつ手作業しているか」に注目すると役割が見えやすくなります。繰り返しをまとめたくなったら、出番を考える合図です。
まとめ
| 項目 | 内容 |
|---|---|
| 役割 | 受け取った結果を、次のコマンドの引数に変える |
| 価値 | 1件ずつ手作業で繰り返さずに済む |
| 前回とのつながり | パイプで流した結果を、さらに使いやすくする |
| まず意識したいこと | 細かな構文より、まとめて次へ渡す考え方 |
xargs は名前こそ地味ですが、役割はシンプルです。流れてきた結果を、次のコマンドが使いやすい形に整える——その感覚がつかめれば十分です。
まずは短い例で、一覧を次の処理へ渡す流れを試してみましょう。
次回予告
次回は、画面を分けながら作業しやすくする tmux を扱います。確認しながら編集する流れを、ターミナルの中でどう整理するかを見ていきましょう。








