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?
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?
Câu trả lời:
Như @Jos đã chỉ ra rằng bạn đã bỏ lỡ một khoảng trống giữa name
và '*.gz'
; cũng để tăng tốc -type f
tù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 -- '{}' \;
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 .find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
-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 -exec
phương pháp.
Một lệnh thay thế và cũng nhanh hơn là sử dụng +
terminator của exec thay vì\;
:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
Lệnh này sẽ rm
chỉ 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 -delete
tùy chọn như sau trong hiện đại find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
vào cuối? Tại sao phải lộn xộn với +
hay \;
?
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 1
ngă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 -31
và 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 {} \;
name
và'*.gz'
.