Lệnh `find` xóa mọi thứ trong một thư mục ngoại trừ các thư mục CVS?


1

Tôi có một thư mục:

$ tree
.
|-- CVS
|   |-- Entries
|   |-- Entries.Log
|   |-- Repository
|   `-- Root
|-- dirA
|   |-- CVS
|   |   |-- Entries
|   |   |-- Repository
|   |   `-- Root
|   |-- file1
|   `-- file2
|-- dirB
|   |-- CVS
|   |   |-- Entries
|   |   |-- Repository
|   |   `-- Root
|   |-- file3
|   `-- file4
|-- file5
`-- file6

Tôi có thể tìm thấy tất cả các tệp tôi muốn xóa bằng lệnh này:

$ find . -name CVS -prune -o -type f -print

Nhưng nếu tôi đổi -printthành-delete

$ find . -name CVS -prune -o -type f -delete

Mọi thứ đã biến mất. Tại sao?

Câu trả lời:


3

Nhìn vào các trang người đàn ông cho find, dưới -delete:

Khi kiểm tra một dòng lệnh find mà sau này bạn dự định sử dụng với -delete, bạn nên xác định rõ ràng -depth để tránh những bất ngờ về sau. Bởi vì -delete ngụ ý -depth, bạn không thể sử dụng hữu ích -prune và -delete cùng nhau.

Bạn có thể có lẽ hầu hết chỉ cần sử dụng -exec rm {} +thay vì -deletetrong bối cảnh này để làm những gì bạn muốn, nhưng như mọi khi chơi với lửa: làm rất chắc chắn rằng nó hoạt động trước khi đi vào khó khăn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.