Suppression des fichiers .svn recursif

Il arrive souvent que certains projets distribuent des sources qui sont des copies directes d’un dépot Subversion, c’est le cas par exemple d’egroupware. Le problème avec cela, c’est que l’archive contient un nombre très important de fichiers, qui sont strictement inutiles. Pour les supprimer, la commande suivant fait l’affaire :

find . -name .svn -print0 | xargs -0 rm -rf

D’autres variantes sont bien sur possibles, et rien ne vous empeche d’utiliser cette commande pour supprimer d’autres types de fichiers.

4 comments on “Suppression des fichiers .svn recursif
  1. greut dit :

    Je connaissais ce trick sans -print0 et -0, qu’apportent-ils ?

  2. atmaniak dit :

    Comme expliqué dans le man, pour find :

    -print0 vrai ; affiche le nom complet du fichier sur la sortie standard, suivi d’un caractère nul. Ceci permet aux fichiers dont le nom contient un saut de ligne, d’être correctement interprétés par les programmes utilisant les données en sortie de find.

    et pour xargs :

    -0 Les noms des fichiers d’entrée sont terminés par un caractère nul au lieu d’une espace blanche, et les apostrophes, guillemets et backslashs ne sont pas spéciaux (chaque caractère est utilisé littéralement). Désactive la chaîne de fin de fichier, qui est traitée comme tout autre argument. Utile quand des arguments sont susceptibles de contenir des espaces blanches, des marques de protection ou des backslashs. L’option -print0 de GNU find produit une sortie convenant à ce mode.

  3. greut dit :

    un RTFM aurait pu suffire 😀 mais merci pour l’explication.

  4. vieux dit :

    sinon on peut aussi utiliser que find avec la commande:

    find . -type d -name ".svn" -exec rm -rf {} \;

    ou:
    ‘.’ pour dire point de depart le rep courrant.
    ‘-type d’: que les repertoires
    ‘-name ".svn"’: dont le nom est .svn
    ‘-exec’: executer la commande ou ‘{}’ est remplacé par le chemin du fichier trouvé. La syntaxe de ‘-exec’ doit se terminer par ‘;’ mais on met un ‘\’ avant le ‘;’ pour que le shell ne le gére pas comme le caractere de fin de commande.

    see also: "man 1 find"

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*