サーバー上にある大量のファイルを削除しようとしたらエラーで削除が出来ませんでした。
/bin/rm: Argument list too long
下記の方法は一般的でよく使いますよね。
$ rm * -su: /bin/rm: Argument list too long
このディレクトリには、約35,000件のキャッシュファイルがありました。
ネットで調べて見ると、Linux はコマンド名からパラメータ(*指定などは展開後)までの文字数の上限があります。とのこと。
じゃ、この場合、
「cache_c21f969b5f03d33d43e04f8f136e7682_1797ae85613e40bab39c594aa68f12a2」
71文字 × 35,000 で 2,485,000文字 + α になるんですかね・・・。
今回、$ rm *
でファイルを削除が出来なかったですが、削除する方法がありますのでご紹介します!
大量のファイルを消す方法!
特定のファイル名だけを前方一致で消す方法。
// 削除実行 $ find . -name "cache_*" -print | xargs rm rm: cannot remove `./cache_e': Is a directory rm: cannot remove `./cache_c': Is a directory rm: cannot remove `./cache_d': Is a directory rm: cannot remove `./cache_2': Is a directory rm: cannot remove `./cache_f': Is a directory
ディレクトリが前方一致でヒットしても削除はされません。
心配の方は、$ find . -name "cache_*" -type f -print | xargs rm
のようにファイル限定すると安心です。
すべてのファイルを削除する方法。
// 削除実行 $ find . -type f -print | xargs rm
削除後は特に出力はありません。
【おまけ】ファイルを数える方法!
削除する前にファイル数を知りたい方はこちら!ファイル数を調べる方法は、削除するコマンドを応用すれば簡単に数えること出来ます。
特定のファイル名だけを前方一致で数える方法。
// カウント $ find . -name "cache_*" -type f -print | wc -l 0
この場合、オプションの -type f
を付けてあげるのがポイントです。オプションを付けなかった場合は、ディレクトリも数に入るのでファイル限定にします。
すべてのファイルを数える方法。
// カウント $ find . -type f -print | wc -l 0
ファイルをすべて消した後だったので、カウントは 0 でした・・・。