Bạn thực sự rm
là đầu ra của đường ống đến đầu vào của find
. Những gì bạn muốn là sử dụng đầu ra của find
làm đối số để rm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
là lệnh "chuyển đổi" đầu vào tiêu chuẩn của nó thành các đối số của một chương trình khác, hoặc, khi họ đặt nó chính xác hơn trên man
trang,
xây dựng và thực thi các dòng lệnh từ đầu vào tiêu chuẩn
Lưu ý rằng nếu tên tệp có thể chứa các ký tự khoảng trắng, bạn nên sửa cho điều đó:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Nhưng thực ra, find
có một lối tắt cho việc này: -delete
tùy chọn:
find -type f -name '*.sql' -mtime +15 -delete
Xin lưu ý các cảnh báo sau trong man find
:
Warnings: Don't forget that the find command line is evaluated
as an expression, so putting -delete first will make find try to
delete everything below the starting points you specified. When
testing a find command line that you later intend to use with
-delete, you should explicitly specify -depth in order to avoid
later surprises. Because -delete implies -depth, you cannot
usefully use -prune and -delete together.
PS Lưu ý rằng đường ống trực tiếp rm
không phải là một tùy chọn, vì rm
không mong đợi tên tệp trên đầu vào tiêu chuẩn. Những gì bạn đang làm là dẫn chúng ngược lại.