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


79

Tôi viết lệnh dưới đây để xóa tất cả các tệp cũ hơn 7 ngày, nhưng nó không hoạt động:

find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;

Làm thế nào tôi có thể loại bỏ các tập tin này?


5
Cần có một khoảng trống giữa name'*.gz'.
Jos

Câu trả lời:


136

Như @Jos đã chỉ ra rằng bạn đã bỏ lỡ một khoảng trống giữa name'*.gz'; cũng để tăng tốc -type ftùy chọn sử dụng lệnh để chỉ chạy lệnh trên f iles.

Vì vậy, lệnh cố định sẽ là:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;

Giải trình:

  • find: lệnh unix để tìm f iles / d irectories / l mực và v.v.
  • /path/to/: thư mục để bắt đầu tìm kiếm của bạn trong.
  • -type f: chỉ tìm tập tin.
  • -name '*.gz': liệt kê các tập tin kết thúc bằng .gz.
  • -mtime +7: chỉ xem xét những người có thời gian sửa đổi cũ hơn 7 ngày.
  • -execdir ... \;: cho mỗi kết quả như vậy được tìm thấy, thực hiện lệnh sau trong ....
  • rm -- '{}': xóa tệp; các {}phần là nơi mà các kết quả tìm được thay ra từ phần trước. --có nghĩa là kết thúc các tham số lệnh tránh lỗi nhắc nhở cho các tệp bắt đầu bằng dấu gạch nối .

Ngoài ra, sử dụng:

find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --

Từ người đàn ông tìm thấy :

-print0 
      True; print the full file name on the standard output, followed by a null character 
  (instead of the newline character that -print uses). This allows file names that contain
  newlines or other types of white space to be correctly interpreted by programs that process
  the find output. This option corresponds to the -0 option of xargs.

Đó là một chút hiệu quả hơn, bởi vì nó lên tới:

rm file1 file2 file3 ...

như trái ngược với:

rm file1; rm file2; rm file3; ...

như trong -execphương pháp.


Một lệnh thay thế và cũng nhanh hơnsử dụng +terminator của exec thay vì\; :

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +

Lệnh này sẽ rmchỉ chạy một lần vào cuối thay vì mỗi lần tìm thấy tệp và lệnh này gần như nhanh như sử dụng -deletetùy chọn như sau trong hiện đại find:

find /path/to/ -type f -mtime +7 -name '*.gz' -delete

3
Tại sao tôi không đi thẳng -deletevào cuối? Tại sao phải lộn xộn với +hay \;?
mưa01


2

Hãy cẩn thận loại bỏ các tập tin với find. Chạy lệnh với -ls để kiểm tra những gì bạn đang xóa

find /media/bkfolder/ -mtime +7 -name '*.gz' -ls . Sau đó lấy lệnh từ lịch sử và nối thêm-exec rm {} \;

Hạn chế thiệt hại một lệnh find có thể làm. Nếu bạn muốn xóa các tệp khỏi chỉ một thư mục, -maxdepth 1ngăn không cho tìm thấy thông qua các thư mục con hoặc tìm kiếm toàn bộ hệ thống nếu bạn đánh máy /media/bkfolder /.

Các giới hạn khác mà tôi thêm là các đối số tên cụ thể hơn như -name 'wncw*.gz', thêm mới hơn thời gian -mtime -31và trích dẫn các thư mục được tìm kiếm. Đây là đặc biệt quan trọng nếu bạn đang tự động dọn dẹp.

find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;

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.