6

超过一个月的用户每天上传的文件将从服务器中删除。用户上传的内容按天存储到目录中(例如/var/www/media/2013-03-13),因此很容易识别需要删除的文件/目录。

问题:一次删除 100,000 个文件会使服务器无响应并且需要很长时间。(Ubuntu 12.04 在软件 RAID1 中带有 2x2TB ext4 SATA3 硬盘)。目前 PHP 正在执行exec命令find /path/to/dir -maxdepth 1 -name '*' -delete

如何拆分删除所需的文件?ls对那些大型目录执行操作将需要很长时间。

解决方案不必在 PHP 中。它甚至不需要将文件分成更小的批次

4

2 回答 2

2
  1. 找到您想要保留的日子的目录
  2. 查找所有日子的目录
  3. 从 2 中删除 1.
  4. rm -rf您从 3 获得的目录。

我不确定这是否比您的方法更快,但它避免了明确列出目录中的所有文件。

于 2013-03-14T14:09:09.593 回答
0

诀窍不是读取所有文件,而是用来readdir一个一个地获取它们。请参阅Perl 的救援:为 Perl 解决方案删除大目录的案例研究。

于 2013-03-14T14:07:40.927 回答