Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2577 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Effacer un repertoire dans un dossier et ses sous-dossiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Effacer un repertoire dans un dossier et ses sous-dossiers

n°1289165
le fou
Forza Massallia
Posté le 02-09-2011 à 14:24:46  profilanswer
 

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é :
 

Code :
  1. find * .svn -type d -exe rm -rf {} \;


 
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)
mood
Publicité
Posté le 02-09-2011 à 14:24:46  profilanswer
 

n°1289171
o'gure
Modérateur
Multi grognon de B_L
Posté le 02-09-2011 à 15:07:50  profilanswer
 

Tu filtres mal :

Citation :

-wholename pattern
       File name matches shell pattern pattern. The metacharacters  do
       not treat '/' or '.' specially; so, for example,
   find . -wholename './sr*sc'
       will  print an entry for a directory called './src/misc' (if one
       exists). To ignore a whole directory tree,  use -prune rather
       than  checking every file in the tree.  For example, to skip the
       directory 'src/emacs' and all files and  directories  under  it,
       and  print the names of the other files found, do something like
       this:
   find . -wholename './src/emacs' -prune -o -print


Message édité par o'gure le 02-09-2011 à 15:09:17
n°1289174
le fou
Forza Massallia
Posté le 02-09-2011 à 15:20:34  profilanswer
 

J'ai essayé (en m'inspirant de l'exemple) :
 

Code :
  1. find . -wholename './.svn' -o -print


 
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


---------------
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)
n°1289190
Manisque
Posté le 02-09-2011 à 17:04:34  profilanswer
 

Avec plein de pipes on doit pouvoir s'en sortir.

Code :
  1. find . -type d |grep \.svn |xargs rm -r


(En l'executant sans le dernier pipe au moins pour contrôler avant de tout casser :o).


---------------
Si tu bois froid juste après le potage chaud, ça va faire sauter l'émail de tes dents - Monorailcat iz ohverin
n°1289195
o'gure
Modérateur
Multi grognon de B_L
Posté le 02-09-2011 à 17:45:27  profilanswer
 

[ oggy@nemed ~/wdir/test ]
> tree -a
.
├── 1
│   ├── A
│   ├── B
│   ├── C
│   └── .svn
│       ├── a
│       ├── b
│       └── c
├── 2
│   ├── A
│   ├── B
│   ├── C
│   └── .svn
│       ├── a
│       ├── b
│       └── c
├── 3
│   ├── A
│   ├── B
│   ├── C
│   └── .svn
│       ├── a
│       ├── b
│       └── c
├── A
├── B
├── C
└── .svn
    ├── a
    ├── b
    └── c

 

7 directories, 24 files
[ oggy@nemed ~/wdir/test ]
> find . -type d -name .svn
./2/.svn
./.svn
./1/.svn
./3/.svn
[ oggy@nemed ~/wdir/test ]
> find . -type d -name .svn -exec rm -rf {} \;
find: "./2/.svn": Aucun fichier ou dossier de ce type
find: "./.svn": Aucun fichier ou dossier de ce type
find: "./1/.svn": Aucun fichier ou dossier de ce type
find: "./3/.svn": Aucun fichier ou dossier de ce type
zsh: exit 1     find . -type d -name .svn -exec rm -rf {} \;
[ oggy@nemed ~/wdir/test ]
> tree -a
.
├── 1
│   ├── A
│   ├── B
│   └── C
├── 2
│   ├── A
│   ├── B
│   └── C
├── 3
│   ├── A
│   ├── B
│   └── C
├── A
├── B
└── C

 

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


Message édité par o'gure le 02-09-2011 à 17:47:00
n°1289237
e_esprit
Posté le 03-09-2011 à 12:33:55  profilanswer
 

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)
 
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 {} \+


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1289238
e_esprit
Posté le 03-09-2011 à 12:43:14  profilanswer
 

Pour être plus clair :D
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 [:cerveau dr]


Message édité par e_esprit le 03-09-2011 à 12:43:53

---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1289250
BloodyCarn​age
Posté le 03-09-2011 à 15:02:25  profilanswer
 

svn export <source> <destination>

n°1289263
le fou
Forza Massallia
Posté le 03-09-2011 à 23:13:47  profilanswer
 

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.


---------------
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)
n°1289274
e_esprit
Posté le 04-09-2011 à 10:58:31  profilanswer
 

Les espaces dans les noms de répertoires/fichiers c'est le mal :o
Surtout pour du code source :D


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
mood
Publicité
Posté le 04-09-2011 à 10:58:31  profilanswer
 

n°1289365
le fou
Forza Massallia
Posté le 05-09-2011 à 10:10:52  profilanswer
 

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?


---------------
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)
n°1289369
o'gure
Modérateur
Multi grognon de B_L
Posté le 05-09-2011 à 10:20:58  profilanswer
 

Généralement je pipe dans xargs
Sinon regarde la section  UNUSUAL FILENAMES du man find (-ls notamment)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Effacer un repertoire dans un dossier et ses sous-dossiers

 

Sujets relatifs
Droit acces repertoire sous FREENASconvertir un dossier de video en format DV avec ffmpeg
Install d'appli, le repertoire /etc/asterisk est vide?!Problème changement de repertoire phpMyAdmin
[Résolu]LMDE LXDE - accéder à un dossier partagémercurial(=hg) : le repertoire /var/hg-tools n'existe pas
Dossiers win à win via debianEcart taille dossier
[vsftpd] Montage de répertoire dans user chrooter KO 
Plus de sujets relatifs à : Effacer un repertoire dans un dossier et ses sous-dossiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR