Công việc định kỳ để xóa các tệp cũ hơn 3 ngày


21

Tôi cần xóa các tệp cũ hơn 3 ngày với một công việc định kỳ trong 3 thư mục khác nhau. (3 thư mục này là con của thư mục mẹ /a/b/c/1& /a/b/c/2& /a/b/c/3) Điều này có thể được thực hiện với một dòng trong crontab không?

Câu trả lời:


26

Điều này là đủ dễ dàng (mặc dù lưu ý rằng điều này diễn ra trong thời gian sửa đổi hơn 3 ngày trước vì thời gian tạo chỉ có sẵn trên một số hệ thống tệp nhất định với các công cụ đặc biệt):

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

Xóa #trước -deletekhi bạn chắc chắn rằng nó đang tìm các tệp bạn muốn xóa.

Để chạy nó bằng cron, có lẽ tôi chỉ cần tạo một tập lệnh thực thi (thêm một shebang - #!bin/shvào dòng trên cùng của tệp và thực hiện với chmod a+x), sau đó đặt nó vào một cronthư mục thích hợp như /etc/cron.dailyhoặc /etc/cron.weekly. Tất nhiên với điều kiện là bạn không cần một lịch trình cụ thể hơn và các thư mục này tồn tại trên bản phân phối của bạn.

Cập nhật

Như đã lưu ý dưới đây, -deletetùy chọn cho việc findkhông di động. Cách tiếp cận tương thích POSIX sẽ là:

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

Một lần nữa loại bỏ #khi bạn chắc chắn rằng bạn có các tập tin đúng.

Cập nhật2

Để trích dẫn từ Stéphane Chazelas bình luận dưới đây:

Lưu ý rằng -exec rm {} +có các lỗ hổng điều kiện chủng tộc mà -delete(nếu có) không có. Vì vậy, đừng sử dụng nó trên các thư mục mà người khác có thể ghi. Một số tìm thấy cũng có một -execdirgiảm nhẹ chống lại những lỗ hổng.


Cảm ơn! Có cách nào để chỉ định thư mục mẹ và sau đó là thư mục con để /a/b/c/không phải chỉ định cho mọi tùy chọn không?
KingKongFrog

Chắc chắn, trong một vỏ POSIX bạn có thể làm /a/b/c/[12], nhưng điều này chỉ thực sự phù hợp nếu các thư mục con có tên chữ cái duy nhất. Trong bashbạn có thể làm /a/b/c/{1,2}. Tất nhiên sau đó, dòng bang cho một kịch bản sẽ phải là #!/bin/bashhoặc nếu bạn đang sử dụng crontab, bạn cần đảm bảo rằng nó được cấu hình để sử dụng bash(tôi thực sự không khuyên bạn nên thay đổi nó nếu không).
Graeme

2
mở rộng cú đúp là một tính năng csh và cũng được hỗ trợ bởi ksh, bash, zsh và cá để bạn có nhiều lựa chọn về vỏ. ksh, bashzshcũng có nhà khai thác luân phiên trong những đống của họ. Lưu ý rằng -exec rm {} +có các lỗ hổng điều kiện chủng tộc mà -delete(nếu có) không có. Vì vậy, đừng sử dụng nó trên các thư mục mà người khác có thể ghi. Một số tìm thấy cũng có một -execdirgiảm nhẹ chống lại những lỗ hổng.
Stéphane Chazelas

Không rm -fâm thầm xử lý lỗi, do đó xử lý bất kỳ điều kiện cuộc đua có thể với -exec?
Acumenus


9

Bạn sẽ tốt hơn nhiều khi sử dụng tmpwatch

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.

2
tmpwatchđã được rẽ nhánh tmpreaper, mà (ít nhất là trên Debian) dường như là sự thay thế.
Jaap
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.