6

ユーザーがアップロードしてから 1 か月以上経過したファイルは、毎日サーバーから削除されます。ユーザーのアップロードは、日ごとにディレクトリ (例: /var/www/media/2013-03-13) に保存されるため、削除する必要があるファイル/ディレクトリを簡単に特定できます。

問題:一度に 100,000 個のファイルを削除すると、サーバーが応答しなくなり、時間がかかります。(ソフトウェア RAID1 に 2x2TB ext4 SATA3 hdd を搭載した Ubuntu 12.04)。現時点では、PHP はexecコマンドで実行していfind /path/to/dir -maxdepth 1 -name '*' -deleteます。

削除に必要なファイルを分割するにはどうすればよいですか? これらの大きなディレクトリでは、実行lsに非常に時間がかかります。

ソリューションは PHP である必要はありません。ファイルを小さなバッチに分割する必要さえありません

4

2 に答える 2

2
  1. 保存したい日のディレクトリを見つける
  2. すべての日のディレクトリを見つける
  3. 1. を 2. から削除します。
  4. rm -rf3から取得したディレクトリ。

これがあなたの方法よりも速いかどうかはわかりませんが、ディレクトリ内のすべてのファイルを明示的にリストすることを回避します。

于 2013-03-14T14:09:09.593 に答える
0

コツは、すべてのファイルを読み取るのではなく、readdir1 つずつ取得するために使用することです。Perl を参照してください: Perl ソリューションの大きなディレクトリを削除するケース スタディ。

于 2013-03-14T14:07:40.927 に答える