
1,300万以上のファイルがあるディレクトリがあり、mtimeに基づいてそれらのいくつかを削除したいと思います。これを効率的に行う方法は? ext4にあります。
答え1
おそらく、以下より効率的なものを得ることはできません。
find /dir -type f -mtime +6 -delete
7日(たとえば、6日ではなく7日)を過ぎたファイルを削除します。
いずれにせよ、各lstat()
ファイルに対してシステムコールを実行して最後の変更時刻を確認する必要があります。ファイルの削除(unlink()
ディレクトリからファイルを削除)は、ディレクトリの内容の編集、ディレクトリの変更時間の更新、inodeのファイルリンク数の更新、ブロック/範囲の割り当て情報の更新が必要なため、高価です。
(GNU拡張)を使用することは、別のユーティリティを呼び出すことなく直接実行できるため、-delete
非常に効率的です。という意味ですが、パフォーマンスには大きな影響を与えないようです。unlink()
find
rm
-depth