Comment utiliser Terminal pour supprimer tous les dossiers .svn de manière récursive?

56

Quelle commande puis-je taper dans le terminal pour pouvoir supprimer tous les .svndossiers d'un dossier (et de tous les sous-répertoires) sans rien supprimer d'autre?

Mikey
la source
Peut-être que vous pourriez simplement svn export path/to/repo path/to/export/to...
Jonny le
Une note svn exportest que cela ne copie pas les fichiers qui ne font pas partie de svn. Par exemple, je voulais faire cela pour une application iOS qui utilise Cocoa Pods où nous ne validons pas le dossier Pods. Cela a ensuite été ignoré de la sortie. J'ai fini par utiliser quelque chose de similaire à la réponse de Rich pour ce que je voulais.
jackofallcode

Réponses:

120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • Utilisez find, qui fait de la récursivité
  • dans le répertoire en cours.
  • filetype est un répertoire
  • nomfichier est .svn
  • affiche ce qui correspond à ce point (les répertoires .svn)
  • exec la commande rm -rf (thing found from find). le {} est un espace réservé pour l'entité trouvée
  • le ; indique à find que la commande pour exec est terminée. Puisque la coquille a aussi une idée de quoi; est, vous devez y échapper avec \ pour que le shell ne fasse rien de spécial avec elle, et passe juste pour trouver
Rich Homolka
la source
2
Bonne solution. Bien que finda -deleteil ne sera pas supprimer des répertoires non vides. Cette approche est plus propre que par exemple commencer à faire correspondre des parties du chemin d'accès complet des fichiers.
Daniel Beck
13
Je vous recommande de l'exécuter sans la -exec rm -rf {} \;première fois pour vous assurer qu'il ne fait que trouver ce que vous voulez. Je n'ai jamais eu de problème en effaçant accidentellement la mauvaise chose, car je vérifie toujours d'abord.
Rob
2
@Rob bon point, je fais habituellement -exec echo rm -rf {} \; puis supprimez l'écho.
Rich Homolka
Une autre option s'il n'y en a pas trop serait de confirmer la suppression de chaque fichier avec-exec rm -ri {} \;
doovers
4
-exec rm -rf {} +est probablement beaucoup plus rapide, car il ne faut pas lancer trop d' rminstances. Au lieu de cela, il regroupe la quantité maximale d'arguments (les répertoires à supprimer dans ce cas) en un seul appel. Ceci est possible car rmaccepte plusieurs arguments.
Daniel B