Come usare Terminal per cancellare ricorsivamente tutte le cartelle .svn?


56

Quale comando posso digitare nel Terminale in modo da poter eliminare tutte le .svncartelle all'interno di una cartella (e da tutte le sottodirectory) ma non cancellare nient'altro?


Forse potresti svn export path/to/repo path/to/export/toinvece ...
Jonny il

Una nota su svn exportè che non viene copiata su file che non fanno parte di svn. Ad esempio, volevo farlo per un'applicazione iOS che utilizza Cocoa Pods in cui non eseguiamo il commit della cartella Pods. Questo è stato quindi ignorato dall'output. Ho finito per usare qualcosa di simile alla risposta di Rich per quello che volevo.
jackofallcode

Risposte:


120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • Usa find, che fa ricorsione
  • nella directory corrente.
  • filetype è directory
  • il nome del file è .svn
  • stampa ciò che corrisponde a questo punto (le dir .svn)
  • esegui il comando rm -rf (thing found from find). {} è un segnaposto per l'entità trovata
  • il ; indica che il comando per exec è stato eseguito. Dal momento che la shell ha anche un'idea di cosa; cioè, è necessario evitarlo con \ in modo che la shell non faccia nulla di speciale con esso, e passa solo per trovarlo

2
Buona soluzione Mentre findha -deletenon cancellerà le directory non vuote. Questo approccio è più pulito rispetto ad esempio all'avvio della corrispondenza di parti dell'intero percorso dei file.
Daniel Beck

13
Consiglierei di eseguirlo senza la -exec rm -rf {} \;prima volta per assicurarmi che trovi solo quello che vuoi. Non ho mai avuto un problema in cui ho cancellato accidentalmente la cosa sbagliata, perché controllo sempre prima.
Rob,

2
@Rob buon punto, di solito faccio -exec echo rm -rf {} \; quindi rimuovere l'eco.
Rich Homolka,

Un'altra opzione se non ce ne fossero troppe sarebbe quella di confermare la cancellazione di ogni file con-exec rm -ri {} \;
scopre il

4
-exec rm -rf {} +è probabilmente molte volte più veloce, perché non deve avviare troppe rmistanze. Comprende invece la quantità massima di argomenti (directory da rimuovere in questo caso) in una chiamata. Questo è possibile perché rmaccetta più argomenti.
Daniel B,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.