xargs
ユーティリティを使用すると、標準入力からコマンドを作成して実行できます。通常、配管を介して他のコマンドと組み合わせて使用されます。
xargs
を使用 、mkdir
などのコマンドラインユーティリティへの引数として標準入力を提供できます およびrm
。
このチュートリアルでは、xargs
の使用の基本について説明します。 コマンド。
Linuxの使用方法xargs
コマンド#
xargs
空白または改行で区切られた標準入力から引数を読み取り、入力をコマンドの引数として使用して、指定されたコマンドを実行します。コマンドが指定されていない場合、デフォルトは/bin/echo
です。 。
xargs
の構文 コマンドは次のとおりです:
xargs [OPTIONS] [COMMAND [initial-arguments]]
xargs
を使用する最も基本的な例 xargs
へのパイプを使用して、空白で区切られたいくつかの文字列を渡すことです。 そして、それらの文字列を引数として使用するコマンドを実行します。
echo "file1 file2 file3" | xargs touch
上記の例では、標準入力をxargs
にパイプしています。 、およびtouch
引数ごとにコマンドが実行され、3つのファイルが作成されます。これは、実行する場合と同じです:
touch file1 file2 file3
コマンドを表示してユーザーにプロンプトを表示する方法#
コマンドを実行する前に端末に出力するには、-t
を使用します (--verbose
)オプション:
echo "file1 file2 file3" | xargs -t touch
touch file1 file2 file3
コマンドを実行する前に各コマンドを実行するかどうかのプロンプトを表示する場合は、-p
を使用します。 (--interactive
)オプション:
echo "file1 file2 file3" | xargs -p touch
y
と入力します またはY
コマンドを確認して実行するには:
touch file1 file2 file3 ?...y
このオプションは、破壊的なコマンドを実行するときに役立ちます。
引数の数を制限する方法#
デフォルトでは、コマンドに渡される引数の数は、システムの制限によって決定されます。
-n
(--max-args
)オプションは、指定されたコマンドに渡される引数の数を指定します。 xargs
すべての引数がなくなるまで、指定されたコマンドを必要な回数だけ実行します。
次の例では、標準入力から読み取られる引数の数は1に制限されています。
echo "file1 file2 file3" | xargs -n 1 -t touch
以下の詳細な出力からわかるように、touchコマンドは引数ごとに個別に実行されます。
touch file1
touch file2
touch file3
複数のコマンドを実行する方法#
xargs
を使用して複数のコマンドを実行するには 、-I
を使用します オプション。 replace-str
を定義することで機能します -I
の後 オプションとreplace-str
のすべての出現 xargsに渡された引数に置き換えられます。
次のxargs
例では2つのコマンドを実行します。最初に、touch
を使用してファイルを作成します。 、次に、ls
を含むファイルが一覧表示されます コマンド:
echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'
-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1
-rw-r--r-- 1 linuxize users 0 May 6 11:54 file2
-rw-r--r-- 1 linuxize users 0 May 6 11:54 file3
replace-str
の一般的な選択 は%
。ただし、ARGS
などの別のプレースホルダーを使用することもできます :
echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'
区切り文字を指定する方法#
-d
を使用します (--delimiter
)カスタム区切り文字を設定するオプション。これは、単一文字または\
で始まるエスケープシーケンスのいずれかです。 。
次の例では、;
を使用しています 区切り文字として:
echo "file1;file2;file3" | xargs -d \; -t touch
touch file1 file2 file3
ファイルからアイテムを読み取る方法#
xargsコマンドは、標準入力の代わりにファイルからアイテムを読み取ることもできます。これを行うには、-a
を使用します (--arg-file
)オプションの後にファイル名を続けます。
次の例では、xargs
コマンドはips.txt
を読み取ります ファイルを作成し、各IPアドレスにpingを実行します。
8.8.8.8
1.1.1.1
-L 1
も使用しています xargs
に指示するオプション 一度に1行を読み取ります。このオプションを省略した場合xargs
すべてのIPを単一のping
に渡します コマンド。
xargs -t -L 1 -a ips.txt ping -c 1
ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms
...
ping -c 1 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms
xargs
の使用 find
を使用 #
xargs
ほとんどの場合、find
と組み合わせて使用されます 指図。 find
を使用できます 特定のファイルを検索してから、xargs
を使用します それらのファイルに対して操作を実行します。
改行やその他の特殊文字を含むファイル名の問題を回避するには、常にfind -print0
を使用してください。 オプション。これにより、find
が発生します。 完全なファイル名の後にヌル文字を続けて出力します。この出力は、xargs
によって正しく解釈できます。 -0
を使用する 、(--null
)オプション。
次の例では、find
/var/www/.cache
内のすべてのファイルのフルネームを出力します ディレクトリとxargs
ファイルパスをrm
に渡します コマンド:
find /var/www/.cache -type f -print0 | xargs -0 rm -f
xargsを使用した空白文字のトリミング#
xargs
特定の文字列の両側から空白を削除するためのツールとしても使用できます。文字列をxargs
にパイプするだけです コマンドを実行すると、トリミングが実行されます:
echo " Long line " | xargs
Long line
これは、シェルスクリプトの文字列を比較するときに役立ちます。
#!/bin/bash
VAR1=" Linuxize "
VAR2="Linuxize"
if [[ "$VAR1" == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
## Using xargs to trim VAR1
if [[ $(echo "$VAR1" | xargs) == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
Strings are not equal.
Strings are equal.
結論#
xargs
は、コマンドのビルドと実行を可能にするLinux上のコマンドラインユーティリティです。
各xargs
の詳細については オプションで、xargsのマンページを読んでください。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。