« C/S型とウェブ型の違い(ゲーム) | トップページ | フォネティックコード »

2014.04.11

ファイル数が多すぎてrmできない場合

ログファイルや一時ファイルを保存している中で、気がつけばとんでもない量のファイルがひとつのディレクトリ内に収容されてしまっている、ということはまあそこそこよくあるケースなわけでして。
そんなときには

rm -f *hogehoge
のように、特定の文字列を含むファイルを消してしまってスッキリ、とさせたいものである。
が、これができないことも時としてある。

しかしファイル数が多すぎる場合、OSにもよるのだが一部だけを削除しようとしたりする方法であるとエラーが出てしまう。

ディレクトリに60万ファイルを置いておき、そこから拡張子指定でlsしてみた。
AIXでの例:

hogehoge#(/usr/test):rm -f *txt
Arguments too long.
このように件数が多すぎ、になってしまう。

これはOSやメモリー、環境変数の設定などによるのだろうが、あまり深追いはしない(^^;

今回は古いファイルを削除したい、というのがニーズだったのでファイルのタイムスタンプを取得して、順次ファイル名を指定して削除するような動作をfindを使用して実現することとした。

find ${DIR1} -mtime +30 -exec rm -f {} \;
こんな感じで、作成されてから30日以上経過しているファイルだけを削除対象とするようにしてみた。 findは順次ファイルを読んでいき、そのたびに-execでrmに対して読み込みバッファを渡している感じなのかなあ?

rmやlsの場合は先に結果出力分をバッファしてるんではないかと推測する。

|

« C/S型とウェブ型の違い(ゲーム) | トップページ | フォネティックコード »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/59450561

この記事へのトラックバック一覧です: ファイル数が多すぎてrmできない場合:

« C/S型とウェブ型の違い(ゲーム) | トップページ | フォネティックコード »