每天用戶上傳的超過一個月的文件將從服務器中刪除。用戶上傳按日期存儲到目錄中(例如/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中。它甚至不需要將文件分成更小的批次
我試過了'rm -rfv dirname'和'find dirname -maxdepth 1 -print -delete',所以兩者都會在刪除文件名時打印出來。對於這兩種情況,被刪除的文件列表都被傳輸到標準輸出,然後它就掛在那裏。 'df'顯示沒有更多的文件被刪除....直到一段時間後,更多的文件顯示被刪除,然後再次掛起 – Nyxynyx 2013-03-14 14:28:46