Làm cách nào để sử dụng Terminal để xóa tất cả các thư mục .svn một cách đệ quy?


56

Lệnh nào tôi có thể nhập vào Terminal để tôi có thể xóa tất cả các .svnthư mục trong một thư mục (và từ tất cả các thư mục con) nhưng không xóa bất cứ thứ gì khác?


Có lẽ bạn chỉ có thể svn export path/to/repo path/to/export/tothay vào đó ...
Jonny

Một lưu ý svn exportlà không sao chép trên các tệp không phải là một phần của svn. Ví dụ: tôi muốn làm điều này cho một ứng dụng iOS sử dụng Cốc Cốc, nơi chúng tôi không cam kết thư mục Pods. Điều này sau đó đã được bỏ qua từ đầu ra. Cuối cùng tôi đã sử dụng một cái gì đó tương tự như câu trả lời của Rich cho những gì tôi muốn.
jackofallcode

Câu trả lời:


120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • Sử dụng find, mà đệ quy
  • trong thư mục hiện tại.
  • filetype là thư mục
  • tên tệp là .svn
  • in những gì phù hợp cho đến thời điểm này (các thư mục .svn)
  • thực hiện lệnh rm -rf (thing found from find). {} là một giữ chỗ cho thực thể được tìm thấy
  • các ; nói rằng lệnh cho exec được thực hiện. Vì vỏ cũng có ý tưởng về cái gì; là, bạn cần phải thoát nó bằng \ để cái vỏ không làm gì đặc biệt với nó, và chỉ cần vượt qua để tìm

2
Giải pháp tốt. Trong khi find-deletenó sẽ không xóa thư mục không rỗng. Cách tiếp cận này sạch hơn ví dụ: bắt đầu khớp các phần của toàn bộ đường dẫn của tệp.
Daniel Beck

13
Tôi khuyên bạn nên chạy nó mà không phải -exec rm -rf {} \;lần đầu tiên để đảm bảo rằng nó chỉ tìm thấy những gì bạn muốn. Tôi chưa bao giờ gặp sự cố khi tôi vô tình xóa nhầm điều đó vì tôi luôn kiểm tra trước.
Cướp

2
@Rob điểm tốt, tôi thường làm -exec echo rm -rf {} \; sau đó loại bỏ tiếng vang.
Rich Homolka

Một tùy chọn khác nếu không có quá nhiều sẽ là xác nhận xóa từng tệp với-exec rm -ri {} \;
doovers

4
-exec rm -rf {} +có thể nhanh gấp nhiều lần, vì nó không phải khởi chạy quá nhiều rmtrường hợp. Thay vào đó, nó đóng gói số lượng đối số tối đa (thư mục cần loại bỏ trong trường hợp này) trong một cuộc gọi. Điều này là có thể bởi vì rmchấp nhận nhiều đối số.
Daniel B
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.