Xóa các tệp cũ hơn 500 ngày


10

Tôi có thư mục chứa các tệp từ năm 2010 .. Tôi muốn xóa tất cả các tệp cũ hơn 500 ngày và tôi đã thử cách này:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

Nhưng tôi hiểu điều này:

-bash: /usr/bin/find: Argument list too long

Theo tôi biết điều này có nghĩa là có quá nhiều tệp và findkhông thể xử lý chúng. Nhưng ngay cả khi tôi đặt hơn +20003 năm tôi vẫn nhận được thứ này.

Tôi đang thiếu gì ở đây?


Câu trả lời:


18

Bạn đang thiếu mà findkhông cần một danh sách các tệp làm đầu vào. Vấn đề là toàn cầu /var/log/arc/*mở rộng ra quá nhiều tệp. Tuy nhiên, findtheo mặc định sẽ tái phát thành các thư mục con, do đó không cần phải sử dụng toàn cầu:

find /var/log/arc/ -type f -mtime +500 -delete

-deletelà một vị ngữ không chuẩn. Nếu findviệc triển khai của bạn không hỗ trợ nó, bạn có thể sử dụng:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

thay thế.


Cảm ơn nhưng giờ đã hiểu điều này: find: invalid predicate -delete'`
Garg

1
@Garg trước, xin lỗi, tôi vừa sao chép lệnh của bạn và không nhận thấy cú pháp của bạn sai. Các -deletekhông mất {}. Xem cập nhật. Tuy nhiên, thông báo lỗi của bạn dường như gợi ý rằng phiên bản findkhông hỗ trợ của bạn -delete. Nếu bạn không sử dụng GNU find(trong hầu hết các trường hợp bạn sẽ không sử dụng trừ khi bạn sử dụng Linux), bạn cần sử dụng -exec -rm {} \;thay thế.
terdon

Cảm ơn bạn. -exec rm {} \;làm mánh khóe
Garg

1
@hobbs Tôi không thấy lý do tại sao không, -execđược định nghĩa bởi POSIX .
terdon

@terdon sai lầm của tôi.
hobbs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.