2013-03-14 65 views
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中。它甚至不需要将文件分成更小的批次

回答

2
  1. 找到你想保持
  2. 查找所有天目录天目录
  3. 删除1. 2.
  4. rm -rf从3
拿到目录

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

+0

我试过了'rm -rfv dirname'和'find dirname -maxdepth 1 -print -delete',所以两者都会在删除文件名时打印出来。对于这两种情况,被删除的文件列表都被传输到标准输出,然后它就挂在那里。 'df'显示没有更多的文件被删除....直到一段时间后,更多的文件显示被删除,然后再次挂起 – Nyxynyx 2013-03-14 14:28:46