从服务器上删除每天用户上传的超过一个月的文件。 用户上传按date保存到目录中(如/var/www/media/2013-03-13
),便于识别需要删除的文件/目录。
问题:一次删除100,000个文件会导致服务器无响应,需要很长时间。 (使用软件RAID1中的2x2TB ext4 SATA3硬盘的Ubuntu 12.04)。 目前,PHP正在exec
命令find /path/to/dir -maxdepth 1 -name '*' -delete
。
如何分割删除所需的文件? 在这些大目录上做一个ls
将会花很长时间。
解决scheme不需要在PHP中。 它甚至不需要将文件分成更小的批次
rm -rf
你从3获得的目录。 我不确定这是否比你的方法快,但它避免了明确列出目录中的所有文件。
诀窍不是读取所有文件,而是使用readdir
逐一获取它们。 请参阅Perl以获取有关 Perl解决方案的大型目录的案例研究 。