第8回 | 複数の結果を次のコマンドへ渡す | xargs で作業をつなげる基本|ターミナル仕事術

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第8回 | 複数の結果を次のコマンドへ渡す | xargs で作業をつなげる基本|ターミナル仕事術

ターミナル仕事術 | 第8回

ターミナルで作業していると、一覧として出てきた結果を「このあと別のコマンドにも使いたい」と思う場面が増えてきます。1つずつ手で打ち直しても進められますが、件数が増えるほど面倒になり、打ち間違いも起きやすくなります。

今回は、そんな「複数の結果を次のコマンドへ渡す」ための基本として、xargs の役割を整理します。前回のパイプの考え方を一歩進めて、結果をそのまま次の作業につなげる感覚を見ていきましょう。

動画で流れを先に見たい方は、UNIX Cafe の YouTube もあわせてどうぞ。記事と同じく、初心者向けのやさしい流れで 、ターミナルの最初の一歩を確認できます。


📝 この記事で学べること

  • xargs が何をしているのか
  • パイプだけでは足りない場面で、なぜ役立つのか
  • 複数の結果をまとめて次へ渡す考え方
  • 探す、読む、処理する流れの中でどう使えるのか

目次

xargs は「流れてきた結果を、次のコマンドの引数にする」道具

xargs は、標準入力で受け取った文字列を、次のコマンドに渡すための道具です。少し難しく聞こえますが、一言で言えば「流れてきたリストを、コマンドが使いやすい形に整える役」です。

前回学んだパイプは、あるコマンドの結果を次のコマンドへそのまま流す仕組みでした。xargs はその間に入り、「流れてきた結果を、次のコマンドが扱える対象として並べる」役割を担います。

ここで出てくる「引数(ひきすう)」という言葉が気になった方へ。

引数とは、コマンドに渡す「対象」や「設定」のことです。ls DocumentsDocumentscat memo.txtmemo.txt がそれにあたります。xargs は、この引数の部分を自動で組み立ててくれます。

要素役割見方
パイプ |前の結果を次へ流す結果をつなぐ
xargs流れてきた結果を引数に並べ直す対象に変える
次のコマンド実際の処理を行う読む、表示する、操作する

なぜ xargs が必要になるのか

一覧の結果を見て、「この全部に同じことをしたい」と思う場面はよくあります。見つけたファイルをまとめて表示したい、複数の対象に同じ処理を実行したい——そんなとき、1件ずつ手で入力し直すのは非効率です。

xargs は、この「一覧として出てきた結果」を「次のコマンドが受け取りやすい引数の並び」に変えてくれます。難しいオプションを覚える前に、まずはここだけ押さえてください。

パイプだけでは足りない理由

コマンドによって「受け取り方」が違います。grepsort のように、流れてきたテキストをそのまま処理できるコマンドはパイプだけで動きます。一方 catls は「ファイル名を引数として受け取る」設計なので、パイプで直接つないでも期待通りに動きません。xargs はこのギャップを埋めます。


✔ ポイント

xargs の価値は、「手作業で1件ずつ繰り返す」を「まとめて次へ渡す」に変えられることです。最初は構文を暗記するより、この価値を理解するほうが大切です。


まずは考え方だけを短い例で見る

次の例では、2つのファイル名を流して、cat に渡しています。

$ printf "memo.txt
todo.txt
" | xargs cat

printf が出した2つの名前を、xargs が受け取り、cat memo.txt todo.txt のような形にして実行します。つまり、ただの文字列の並びを、cat が扱える「対象の一覧」に変えているわけです。

このコマンドが内部でやっていること

  1. printf "memo.txt\ntodo.txt\n" が、2行のテキストを出力する(\n は改行を意味します)
  2. パイプ | がその出力を xargs へ流す
  3. xargsmemo.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 を見つけた場合、xargsls -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 を扱います。確認しながら編集する流れを、ターミナルの中でどう整理するかを見ていきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次