Tệp hàng ngày do người dùng tải lên cũ hơn một tháng sẽ bị xóa khỏi máy chủ. Tải lên của người dùng được lưu vào các thư mục theo ngày (ví dụ: /var/www/media/2013-03-13
) để dễ dàng xác định các tệp/thư mục cần xóa.Xóa hàng loạt số lượng tệp lớn
Sự cố: Xóa 100.000 tệp một lúc khiến máy chủ không hồi đáp và mất nhiều thời gian. (Ubuntu 12.04 với 2x2TB ext4 SATA3 hdd trong phần mềm RAID1). Tại thời điểm PHP đang thực hiện exec
trên lệnh find /path/to/dir -maxdepth 1 -name '*' -delete
.
Làm cách nào để chia nhỏ các tệp cần thiết để xóa? Làm một ls
sẽ mất nhiều thời gian trên những thư mục lớn đó.
Giải pháp không cần phải có trong PHP. Nó thậm chí không yêu cầu chia nhỏ các tệp thành các lô nhỏ hơn
Tôi đã thử 'rm -rfv dirname' và' find dirname -maxdepth 1 -print -delete' để cả hai đều in ra tên tệp khi chúng xóa. Đối với cả hai trường hợp, danh sách các tệp đang bị xóa sẽ được truyền đến stdout, sau đó nó chỉ treo ở đó. 'df' cho thấy không còn tệp nào bị xóa .... cho đến một thời gian sau, nhiều tệp hơn được hiển thị sẽ bị xóa, sau đó lại bị treo – Nyxynyx