Bạn thực sự rmlà đầ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 findlàm đối số để rm:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargslà 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 mantrang,
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, findcó một lối tắt cho việc này: -deletetù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 rmkhông phải là một tùy chọn, vì rmkhô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.