はじめに
特定のLinuxコマンドは、標準入力(stdin)とコマンドライン引数の両方から入力を受け取ります。ただし、入力を引数としてのみ受け取るように設計されているものもあります。標準入力を処理できるようにするには、これらのLinuxコマンドで xargs
を利用する必要があります。 コマンド。
このチュートリアルでは、Linuxのxargs
の使用方法を学習します。 標準入力を操作し、他のコマンドを操作するコマンド。

前提条件
- Linuxを実行しているシステム
- コマンドラインへのアクセス
xargsコマンドとは何ですか?
xargs
commandは、標準入力を通じて提供されるコマンドを作成して実行します。入力を受け取り、それを別のコマンドのコマンド引数に変換します。この機能は、 xargs
のファイル管理で特に役立ちます。 rm
と組み合わせて使用されます 、 cp
、 mkdir
、および他の同様のコマンド。
例でxargsコマンドを使用する方法
単独で使用する場合は、 xargs
ユーザーにテキスト文字列の入力を求め、それを echo
に渡します。 コマンド。

この例は、入力例とそれに続く echo
の出力を示しています。 コマンド。
xargsとfindを組み合わせる
多くの場合、findコマンドは xargs
の前にあります パイプラインで。これを使用して、 xargs
でさらに処理するためのファイルのリストを提供します 。構文は次のようになります:
find [location] -name "[search-term]" -type f | xargs [command]

上記の例は、 find
の使用を示しています .sh
を持つすべてのファイルを検索するコマンド 拡大。次に、ファイルのリストが xargs
にパイプされます。 、 rm
を使用します それらを削除するコマンド。
ただし、 xargs
名前に空白が含まれるファイルは自動的に含まれません。これらのファイルも含めるには、 -print0
を使用します find
のオプション 、および -0
xargs
のオプション :
find [location] -name "[search-term]" -type f -print0 | xargs -0 [command]

rm
.sh
のすべてのファイルを削除するようになりました 拡張機能。
xargsをgrepと組み合わせる
xargs
を使用する grepコマンドを使用して、 find
によって提供されるファイルのリストから文字列を検索します。 コマンド。
find . -name '[search-term]' | xargs grep '[string-to-find-in-files]'

上記の例では、 .txt
を含むすべてのファイルを検索しました 拡張機能とそれらをxargs
にパイプしました 、次に grep
を実行しました それらに命令します。
Xargsの複数のコマンド
xargs
を使用して複数のコマンドを実行するには 、 -I
を使用します オプション。構文は次のとおりです。
[command-providing-input] | xargs -I % sh -c '[command-1] %; [command-2] %'

この例では、 file4.txt
の内容 最初に表示されました。次に、 mkdir
ファイル内の単語ごとにフォルダを作成しました。
ファイルからアイテムを読み取る
前述のように、 xargs
標準入力を読み取ります。 -a
を使用します 代わりにファイルの内容を読み取るオプション。
xargs -a [filename]

tarを使用して画像を検索してアーカイブする
tarコマンドと一緒に使用すると、 xargs
tar.gz
を作成します アーカイブして、 find
によって提供されたファイルを入力します コマンド。
find [location] -name "[search-term]" -type f -print0 | xargs -0 tar -cvzf [tar-gz-archive-name]

印刷コマンド
xargs
によって実行されるコマンドを確認するには 標準出力では、 -t
を使用します オプション。
[command-providing-input] | xargs -t [command]

上記の例では、 xargs
に注意してください。 echo
によって提供される文字列全体に対してmkdirコマンドを実行しました 。
xargsコマンドの実行を承認する
いくつかのxargs
ファイルやフォルダの削除などの操作は元に戻せません。これらのコマンドの実行を制御するには、 -p
を使用します オプション。
[command-providing-input] | xargs -p [command]

-p
を使用してコマンドを実行する場合 オプション、 xargs
実行する前に確認行を表示します。 y
と入力します 続行するか、 n
操作をキャンセルします。
1行あたりの出力を制限する
引数の数を制御する必要がある場合がありますxargs
同時にかかります。 -n
を使用してこのアクションを実行します オプションの後に制限する引数の数が続くxargs
宛先:
[command-providing-input] | xargs -n [number] [command]
以下の例では、 xargs
echo
から文字列を取得します コマンドを実行し、3つに分割します。次に、別の echo
を実行します パーツごとに:

区切り文字を指定する
デフォルトのxargs
区切り文字は空白です。デフォルトの区切り文字を変更するには、 -d
を使用します コマンドの後に1文字またはn
などのエスケープ文字が続く (新しい行)。
[command-providing-input] | xargs -d [new-delimiter] | xargs [command]
以下の例では、 xargs
コマンドは、システムに *
を使用するように指示します 区切り文字としてmkdir
を適用します 取得した各引数に。

システム上のすべてのLinuxユーザーアカウントを一覧表示する
xargs
を使用する cut
などのコマンドの出力を整理する 。次の例を考えてみましょう:
cut -d: -f1 < /etc/passwd | sort | xargs
cutコマンドは、 /etc/passwd
にアクセスします ファイルを作成し、 :
を使用します ファイルの各行の先頭をカットする区切り文字。次に、出力は sort
にパイプされます 、受信した文字列を並べ替え、最後に xargs
それらを表示します:

文字列の空白スペースを削除する
xargs
以降 引数を探すときに空白を無視します。このコマンドは、文字列から不要な空白を削除するのに役立ちます。
echo "[string-with-unnecessary-spaces]" | xargs

各ファイルの行/単語/文字のリスト
xargs
を使用する wcコマンドを使用して、行、単語、文字数を含むファイルのリストを表示します。
ls | xargs wc
以下の例では、lsコマンドに xargs
にパイプするように指示しています。 「example」という単語を含むファイルのみ。 xargs
次に、 wc
を適用しました そのリストへ:

ファイルを複数のディレクトリにコピー
xargs
を使用してファイルを複数のディレクトリにコピーします 指図。構文は単純です:
echo [directory-1] [directory-2] | xargs -n 1 cp -v [filename]

echo
コマンドはディレクトリ名とxargs
を提供します cpコマンドを使用して、指定されたファイルを各ディレクトリにコピーします。