2012-07-02 32 views
5

Tôi muốn xóa các tập tin từ một thư mục cụ thể đệ quy. Vì vậy, tôi đã sử dụngSự khác biệt giữa 'find -delete' và 'rm -rf'?

find . -wholename "*.txt" -delete 

Chúng tôi cũng có thể xóa các tập tin sử dụng

rm -rf *.txt 

sự khác biệt giữa xóa tập tin sử dụng rmfind là gì ??

+3

Với 'find', bạn sẽ cụ thể hơn về những tệp bạn xóa, nhưng cả hai đều kết thúc gọi là 'unlink()' [man page] (http://linux.die.net/man/2/unlink) trên các tệp bạn đang xóa. – Wernsey

Trả lời

5

find . -wholename abd.txt -delete cố gắng để loại bỏ tất cả các tập tin có tên abd.txt mà đâu đó trong cây thư mục của .

rm -rf abd.txt cố gắng để loại bỏ abd.txt, và nếu nó là một thư mục, tất cả các file và thư mục trong toàn bộ cây.

+0

OK. Vậy sự khác biệt giữa việc xóa bằng cách sử dụng 'find -delete' và 'rm -rf' là gì? –

+1

Sử dụng 'find ...' bạn cũng quét các thư mục con, trong khi sử dụng 'rm' bạn chỉ quét các tệp nằm trong thư mục * hiện tại *, không phải trong thư mục con. –

+0

@MisterJack: với '-r',' rm' cũng loại bỏ các thư mục con. – reinierpost

3

Trong khi find -wholename GLOBPATTERN cố gắng để phù hợp với tất cả các file bên dưới thư mục hiện hành (không phụ thuộc vào độ sâu), các glob bạn sử dụng với các lệnh rm chỉ phù hợp chống lại các file đó là trực tiếp (độ sâu 1) trong thư mục hiện hành.

Btw. bạn không cần -r chuyển sang rm trừ khi bạn muốn một cách đệ quy xóa một thư mục (Bởi vì phần mở rộng .txt, tôi giả sử bạn chỉ muốn xóa các tập tin thường xuyên)

1

find sử dụng với -delete, tìm thấy các tập tin và xóa chúng . Find lệnh có trong đường dẫn để tìm các tệp và sau đó cờ -delete xóa các tệp được tìm thấy trong đường dẫn đã cho đó. Vì vậy, bạn có thể nói tìm thấy có nhiều hơn một xóa chọn lọc

Lệnh xóa các tệp/thư mục đệ quy không có vấn đề gì. Nó có nghĩa là rm sẽ xóa tất cả các tệp và thư mục ở đường dẫn cụ thể. -r là viết tắt của đệ quy và -f là lực lượng xóa. Vì vậy, rm kết hợp với -rf sẽ tiếp tục xóa các thư mục và tệp trong thư mục ở đường dẫn đích cho đến khi nó không tìm thấy nữa.