/bin/rm: Argument list too longの対処方法

サーバー上にある大量のファイルを削除しようとしたらエラーで削除が出来ませんでした。

/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 でした・・・。

読んで頂いて有り難うございます!