Bagaimana cara menggunakan Terminal untuk menghapus semua folder .svn secara rekursif?

56

Perintah apa yang bisa saya ketik di Terminal sehingga saya bisa menghapus semua .svnfolder di dalam folder (dan dari semua subdirektori) tetapi tidak menghapus yang lain?

Mikey
sumber
Mungkin Anda bisa svn export path/to/repo path/to/export/tosebaliknya ...
Jonny
Catatan pada svn exportadalah yang tidak menyalin seluruh file yang bukan bagian dari svn. Misalnya, saya ingin melakukan ini untuk aplikasi iOS yang menggunakan Cocoa Pods di mana kami tidak melakukan folder Pods. Ini kemudian dilewati dari output. Saya akhirnya menggunakan sesuatu yang mirip dengan jawaban Rich untuk apa yang saya inginkan.
jackofallcode

Jawaban:

120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • Gunakan find, yang melakukan rekursi
  • dalam direktori saat ini.
  • filetype adalah direktori
  • nama file adalah .svn
  • cetak apa yang cocok dengan titik ini (dir .svn)
  • mengeksekusi perintah rm -rf (thing found from find). {} adalah placeholder untuk entitas yang ditemukan
  • itu; memberitahu menemukan bahwa perintah untuk exec dilakukan. Karena shell juga memiliki ide tentang apa; adalah, Anda perlu menghindarinya dengan \ sehingga shell tidak melakukan sesuatu yang istimewa dengannya, dan lolos untuk menemukannya
Homolka yang kaya
sumber
2
Solusi yang bagus Meskipun findsudah -deletetidak akan menghapus direktori tidak kosong. Pendekatan ini lebih bersih daripada misalnya mulai mencocokkan bagian dari seluruh jalur file.
Daniel Beck
13
Saya sarankan menjalankannya tanpa yang -exec rm -rf {} \;pertama kali untuk memastikan itu hanya menemukan apa yang Anda inginkan. Saya tidak pernah memiliki masalah di mana saya tidak sengaja menghapus hal yang salah dengan itu, karena saya selalu periksa dulu.
Rob
2
@Rob poin bagus, saya biasanya melakukan -exec echo rm -rf {} \; lalu hapus gema.
Rich Homolka
Opsi lain jika tidak ada terlalu banyak adalah mengonfirmasi penghapusan setiap file dengan-exec rm -ri {} \;
doovers
4
-exec rm -rf {} +mungkin berkali-kali lebih cepat, karena tidak harus meluncurkan terlalu banyak rminstance. Sebaliknya, ia mengemas jumlah maksimum argumen (direktori untuk menghapus dalam kasus ini) dalam satu panggilan. Ini dimungkinkan karena rmmenerima banyak argumen.
Daniel B