2007年09月20日 13:30 [Edit]

tips - 1ディレクトリにファイル大杉の場合の削除法

これ、以前にも書いたのですがここでおさらい。

subtech - PBD - 1ディレクトリにン千万ファイルあるときの削除方法
どうやるのが一番良いんだろ。

404 Blog Not Found:勝手に添削 - find(1)より抜粋
find-deleteをサポートしている場合
% find dir -type f -delete
そうでない場合
% find dir -type f | perl -nle unlink

私がこれらを利用しているのは、SPAMの処理の時。Junkフォルダーにまとめたそれらを、bsfilterに食わせた後、上記にて削除。ファイル数十万オーダーでもOK。

あと、1ディレクトリーにファイルを多数押し込んだときに、ファイルシステムがどれだけ遅くなるかはファイルシステムごとに結構違って、FreeBSDではだいぶ前にディレクトリーがHash化されたおかげで、ファイル数に関わらずO(1)オーダーでアクセスできるのだけど、そうなっていないものはO(n)オーダーなことも多い。ファイルを多数使うキャッシュサーバーのディレクトリーがサブディレクトリーに分かれているのはそれが理由。

Dan the Man with Too Many Files to Process


この記事へのトラックバックURL

この記事へのコメント
というか、そういう(対象ディレクトリ以下すべて削除)Tipsだということでは?
それならまあ不親切な記述ではありますが。
Posted by po at 2007年10月02日 21:48
find dir -type f -mindepth 1 -maxdepth 1
対象ディレクトリのファイルのみ抽出
対象ディレクトリ以下のファイルも検出してしまうのでは?
Posted by test at 2007年09月29日 12:29
知ってるコマンドの組み合わせでしたいことができるのがUNIXの長所ではありますが、
いくらなんでもtipsとして紹介するんなら
ls|xargs rm
とか出すんじゃないでしょうか
Posted by rero at 2007年09月22日 15:09