[linux]findで見つけたファイルを全部削除したい場合(パスが長くてもOK)

これを実行する。

$ find . -name \*~ | xargs rm

■背景
ファイル削除のときfindしたファイルを全部削除したい場合、以下のようなコマンドを行っていました。

$ rm `find . -name \*~`

が、kernelだけならまだしもlinuxのビルド環境全体でそのようなコマンドを実行した場合、
findで見つけたパスをrmに渡すことになるため、パスが長いと下記のようなエラーが発生するケースがありました。
めっちゃ時間がかかったあとにぴょこっとエラーになるとへこむ。。。

-bash: /bin/rm: Argument list too long

以下のコマンドを行うと目的が達成されますが、時間がかかりました。(rmコマンドがその都度実行されるため)

$ find . -name \*~ -exec rm {} \;

そして、調べた結果、以下のサイトに行き着きました。
”コマンド実行時の引数の制限を気にしつつ、rmにギリギリの個数のファイル名を渡して、必要最低限の回数だけ実行する。”ため早くなるそうです。
参考:http://openlab.dino.co.jp/2008/02/20/133431188.html

コメント

タイトルとURLをコピーしました