GNU/Linux >> Linux の 問題 >  >> Linux

LinuxのXargsコマンド

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を実行します。

ips.txt
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のマンページを読んでください。

ご質問やご意見がございましたら、お気軽にコメントをお寄せください。


Linux
  1. Linuxでの11のXargsコマンドの例

  2. Linuxmvコマンド

  3. Linuxduコマンド

  1. Linuxipコマンド

  2. Linuxcdコマンド

  3. 10 Linux / UNIX での Xargs コマンドの例

  1. Linuxxargsコマンドの使用方法

  2. Linuxifconfigコマンド

  3. Linux での xargs コマンドの例