Jak używać terminala do rekurencyjnego usuwania wszystkich folderów .svn?

56

Jakie polecenie mogę wpisać w terminalu, aby móc usunąć wszystkie .svnfoldery w folderze (i ze wszystkich podkatalogów), ale niczego innego nie usunąć?

Mikey
źródło
Może mógłbyś svn export path/to/repo path/to/export/tozamiast tego ...
Jonny
Należy pamiętać, svn exportże nie kopiuje plików, które nie są częścią svn. Na przykład chciałem to zrobić dla aplikacji na iOS, która korzysta z Cocoa Pods, w których nie zatwierdzamy folderu Pods. Zostało to następnie pominięte w danych wyjściowych. W końcu użyłem czegoś podobnego do odpowiedzi Richa na to, czego chciałem.
jackofallcode

Odpowiedzi:

120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • Użyj find, która wykonuje rekurencję
  • w bieżącym katalogu.
  • typ pliku to katalog
  • nazwa pliku to .svn
  • wydrukuj to, co pasuje do tego momentu (katalog .svn)
  • wykonać polecenie rm -rf (thing found from find). {} jest symbolem zastępczym dla znalezionej jednostki
  • ; informuje, że polecenie dla exec zostało wykonane. Ponieważ powłoka ma również pojęcie o czym; oznacza to, że musisz uciec z \, aby powłoka nie zrobiła z nim nic specjalnego, a jedynie przechodzi, aby znaleźć
Rich Homolka
źródło
2
Dobre rozwiązanie. O ile findma -deleteto nie będzie usuwać niepuste katalogi. Takie podejście jest czystsze niż np. Rozpoczynanie dopasowywania części całej ścieżki plików.
Daniel Beck
13
Polecam uruchomić go bez -exec rm -rf {} \;pierwszego, aby upewnić się, że tylko znajdzie to, czego chcesz. Nigdy nie miałem problemu z przypadkowym usunięciem niewłaściwej rzeczy, ponieważ zawsze sprawdzam najpierw.
Rob
2
@ Rob dobry punkt, zwykle robię -exec echo rm -rf {} \; następnie usuń echo.
Rich Homolka
Inną opcją, jeśli nie ma ich zbyt wiele, byłoby potwierdzenie usunięcia każdego pliku za pomocą-exec rm -ri {} \;
doovers
4
-exec rm -rf {} +jest prawdopodobnie wiele razy szybszy, ponieważ nie musi uruchamiać zbyt wielu rminstancji. Zamiast tego pakuje maksymalną liczbę argumentów (katalogi do usunięcia w tym przypadku) w jednym wywołaniu. Jest to możliwe, ponieważ rmakceptuje wiele argumentów.
Daniel B