Effacer un repertoire dans un dossier et ses sous-dossiers - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 02-09-2011 à 15:07:50
Tu filtres mal :
Citation : -wholename pattern |
Marsh Posté le 02-09-2011 à 15:20:34
J'ai essayé (en m'inspirant de l'exemple) :
Code :
|
Mais il m'affiche toujours des fichiers et des dossiers qui ne sont pas dans un dossier parent .svn pou qui ne contiennent même pas le motif svn
Marsh Posté le 02-09-2011 à 17:04:34
Avec plein de pipes on doit pouvoir s'en sortir.
Code :
|
(En l'executant sans le dernier pipe au moins pour contrôler avant de tout casser ).
Marsh Posté le 02-09-2011 à 17:45:27
[ oggy@nemed ~/wdir/test ] 7 directories, 24 files 3 directories, 12 files |
Je trouve bizare le coup du "aucun fichier/dossier de ce type, mais ça fonctionne
a, b, c et A, B, C étant des fichiers
Marsh Posté le 03-09-2011 à 12:33:55
Le message est dû je pense au fait que find construit son arborescence de dossiers avant de parcourir, et le \; fait executer les commandes au fur et à mesure du parcours, donc quand il veut parcourir 2/.svn, ce dossier n'existe plus puisque supprimé juste avant. (je sais pas si je suis bien clair )
D'ailleurs, si tu utilises la syntaxe \+ (construction d'une seule commande à executer, qui l'est donc à la fin du parcours, alors que le \; va évaluer au fur et à mesure que ça matche) plus de messages d'erreurs :
find . -type d -name .svn -exec rm -rf {} \+
Marsh Posté le 03-09-2011 à 12:43:14
Pour être plus clair
Dans le cas de find.... -exec command {} \; :
1) Dossier en cours de traitement <= repertoire courant (.)
2) Construction de la liste des répertoires dans le dossier en cours de traitement (.svn 1 2 3)
3) Est-ce l'un de ces dossiers matche ".svn" => oui => execution de la commande demandée sur .svn (qui en l'occurence est un rm et va donc le supprimer, mais ça find ne le sait pas, on lui donne une commande externe, il l'execute...)
4) parcours des fils : pour dossier dans (.svn 1 2 3) : dossier courant <= dossier ; GOTO 2)
=> .svn n'existe pas !
Alors qu'avec le \+ la commande n'est exécuté qu'après le parcours complet de l'arborescence donc pas d'interférence avec l'algo de find
Marsh Posté le 03-09-2011 à 23:13:47
Merci à tous pour vos réponses. Ca peut toujours être utile de connaître ce genre d'options.
Et merci à BloodyCarnage, qui a trouvé une réponse beaucoup plus simple. Si j'avais su que SVN le faisait tout seul.....ca m'apprendra a regarde mieux la doc.
PS: petite question subsidiaire, j'ai essayé la commande find, seulement ca bloque avec les répertoires contenant des espaces.
Marsh Posté le 04-09-2011 à 10:58:31
Les espaces dans les noms de répertoires/fichiers c'est le mal
Surtout pour du code source
Marsh Posté le 05-09-2011 à 10:10:52
Il est vrai.
Pour ma défense, ce n'est pas moi qui est choisit l'arborescence.
Donc, dans cette hypothése, comment indiquer à 'find', ou plutot à 'rm' de prendre en compte les espaces?
Marsh Posté le 05-09-2011 à 10:20:58
Généralement je pipe dans xargs
Sinon regarde la section UNUSUAL FILENAMES du man find (-ls notamment)
Marsh Posté le 02-09-2011 à 14:24:46
Bonjour,
Voici mon problème :
J'ai un dossier qui contient plein de sous-dossiers qui contiennent des sous-dossier, etc.
L'ensemble est sous contrôle de version avec SVN.
J'ai besoin d'envoyer l'ensemble, seulement j'aimerais éviter de fournir tous les dossiers '.svn' présent.
Existe-il un moyen de chercher et d'effacer tous ces répertoires?
J'ai essayé :
mais je me suis aperçu qu'il effacer des fichiers qui n'étais pas présent dans les répertoires ".svn".
Merci pour vos réponses.
Message édité par le fou le 02-09-2011 à 14:24:58
---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)