从服务器中删除超过一个月的日常用户上传文件。用户上传按日存储到目录中(例如/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中。它甚至不需要将文件分成更小的批次
答案 0 :(得分:2)
rm -rf
您从3获得的目录。我不确定这是否比您的方法更快,但它避免显式列出目录中的所有文件。
答案 1 :(得分:0)
诀窍不是读取所有文件,而是使用readdir
逐个获取它们。有关Perl解决方案,请参阅Perl to the rescue: case study of deleting a large directory。