2013-03-14 40 views
6

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

Trả lời

2
  1. Tìm các thư mục của những ngày mà bạn muốn giữ
  2. Tìm các thư mục của tất cả các ngày
  3. Di 1. từ 2.
  4. rm -rf các thư mục bạn nhận được từ 3.

Tôi không chắc chắn nếu điều này là nhanh hơn so với phương pháp của bạn, nhưng nó tránh rõ ràng liệt kê tất cả các tập tin trong các thư mục.

+0

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

Các vấn đề liên quan