38
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Linux】xargsコマンドの使い方

Last updated at Posted at 2022-10-10

基本的な使い方

xargsは以下のように記述することで前のコマンドの実行結果を標準入力から受け取って、次のコマンドの引き数に渡して実行できます。

find . -name "*.log" | xargs rm -fv

上記の場合にはfindコマンドで取得したすべてのファイルパスに対してrmコマンドが実行されます。

以下のようなコマンドが実行されます。

rm -fv ./path/to/sample1.log ./path/to/sample2.log ./path/to/sample3.log

ドライラン

-pをつけると実際にはコマンドは実行されず実行される予定のコマンドの内容が出力されます。

$ find . -name "*.log" | xargs -p rm -fv
rm -fv ./path/to/sample1.log ./path/to/sample2.log ./path/to/sample3.log?...

引数の位置を指定

以下のように記述することで引数の位置を指定できます。

find . -name "*.log" | xargs -i cp {} /exampledir/

以下のようなコマンドが実行されます。

cp ./path/to/sample.log /exampledir/

また以下のように記述しても上記と同様のことが実現できます。

find . -name "*.yml" | xargs -IXXX cp -f XXX ./exampledir/

引数の最大数を指定

-L 数値を追記するとコマンドに一度に渡す引数の最大数を指定できます。

find . -name "*.log" | xargs -L 1 rm -fv

上記の場合にfindコマンドで3つのパスを取得したとすると以下のように実行されます。

$ rm -fv ./path/to/sample1.log
$ rm -fv ./path/to/sample2.log
$ rm -fv ./path/to/sample3.log

なお-L 数値は改行ごとに1つの引数として扱います。

-n 数値でも引数の数を指定できますがこちらはxargsがコマンドに渡す引数の最大数を指定します。

$ seq -s ' ' 10 | xargs -L 2 echo T
T 1 2 3 4 5 6 7 8 9 10

$ seq -s ' ' 10 | xargs -n 2 echo T
T 1 2
T 3 4
T 5 6
T 7 8
T 9 10

同時実行の最大数を指定

-P 数値を追記すると同時実行の最大数を指定できます。

find . -name "*.log" | xargs -L 1 -P 2 rm -fv

上記の場合にfindコマンドで3つのパスを取得したとすると1つ目と2つ目が同時実行されその後に3つ目が実行されます。

38
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?