2013-03-14 90 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