Linux便利コマンド : xargs

うめだ
2023-01-24
2023-06-09
目次

はじめに

みなさま、xargsコマンドを活用されていますでしょうか?

特定のディレクトリに大量に生成されたファイルを一括削除したいことありますよね。

そんな時、以下のようなコマンドを実行したらエラーになってしまうケースがあります。

$ /bin/rm ./sample_log_dir/*
  
-bash: /bin/rm: Argument list too long

アスタリスクで全ファイルを指定した際、対象ファイルが多いと引数が長すぎるとエラーになります。

そこで、xargsの登場です。

 

環境

OS : AlmaLinux 8
xargsバージョン : 4.6.0

使い方

$ find sample_log_dir -type f | xargs rm

sample_log_dirの中身は下記のコマンドで、ファイル名が000001~100000までの10万ファイルを生成しました。

for TGT in {000001..100000}
do
 touch ./sample_log_dir/$TGT
done

findコマンドとxargsコマンドを使うことで、10万ファイルも一括で削除することができます。

ちなみに、引数展開の限界を確認してみました。

65446ファイルまでは引数展開できましたが、

$ ls -la ./sample_log_dir/{000001..065446} | wc -l
65446

それ以上はエラーになりました。

$ ls -la ./sample_log_dir/{000001..065447} | wc -l
-bash: /usr/bin/ls: Argument list too long
0

引数の指定内容によって?、挙動がかわるみたいなので、
興味があれば、いろいろ試してみると面白いかもしれません。

まとめ

いかがでしたか?

今回はrmでのファイル削除でしたが、mv や cp も指定次第で実行可能ですので、
是非とも、一度使ってみてください。