Bạn đang thực sự piping rm
's đầu ra vào đầu vào của find
. Những gì bạn muốn là sử dụng đầu ra của find
như luận để rm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
là lệnh rằng "cải đạo" đầu vào tiêu chuẩn của nó vào lập luận của một chương trình khác, hoặc, như họ chính xác hơn đặt nó trên các man
trang,
xây dựng và thực hiện các dòng lệnh từ đầu vào tiêu chuẩn
Lưu ý rằng nếu tên tập tin có thể chứa các ký tự khoảng trắng, bạn nên sửa cho rằng:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Nhưng trên thực tế, find
có một phím tắt cho việc này: các -delete
tùy chọn:
find -type f -name '*.sql' -mtime +15 -delete
Xin lưu ý của cảnh báo sau đây 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 đến rm
không phải là một tùy chọn, bởi 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à đưa chúng ngược trở lại.
Nguồn
2012-06-25 15:03:04
Cảm ơn. Tôi đọc trang người đàn ông và thử cờ đó. Tôi đang đi qua một con đường đầy đủ nhưng nhận lại "/ usr/www2/bar/htdocs/foo/rsync/httpdocs/db_backups /: đường dẫn tương đối có khả năng không an toàn". Bất kỳ ý tưởng tại sao? – jerrygarciuh
@jerrygarciuh hãy xem [tại đây] (http://www.mail-archive.com/[email protected]/msg16944.html). –
cảm ơn. Tôi không chắc chắn tôi đã theo dõi bài viết tốt nhưng khi tôi mô phỏng giải pháp của họ và đặt -delete ở cuối lệnh, nó xóa tất cả các tệp sql bất kể thời gian mod ... nhưng nó không có cảnh báo vì vậy tôi đoán đó là sự tiến bộ ... – jerrygarciuh