批量删除大量文件

时间:2013-03-14 14:01:48

标签: php linux unix ubuntu

从服务器中删除超过一个月的日常用户上传文件。用户上传按日存储到目录中(例如/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中。它甚至不需要将文件分成更小的批次

2 个答案:

答案 0 :(得分:2)

  1. 找到您要保留的日期的目录
  2. 查找所有日子的目录
  3. 从2中删除1.
  4. rm -rf您从3获得的目录。
  5. 我不确定这是否比您的方法更快,但它避免显式列出目录中的所有文件。

答案 1 :(得分:0)

诀窍不是读取所有文件,而是使用readdir逐个获取它们。有关Perl解决方案,请参阅Perl to the rescue: case study of deleting a large directory