Exclure un répertoire dans une commande rm

Exclure un répertoire dans une commande rm - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 07-07-2008 à 11:48:39    

Bonjour,
 
Mon problème est simple mais je n'arrive pas à en trouver la solution.
 
Je souhaite réinitialiser périodiquement un répertoire de test. Sur le principe, j'ai un répertoire A et un répertoire B. Chacun de ces répertoires contient des fichiers et des dossiers.
Je veux vider le répertoire B de son contenu sauf un seul dossier (celui contenant des paramètres). Une fois ce répertoire B vide, je veux y recopier les fichiers et dossiers du répertoire A, à l'exception du dossier que je n'ai pas effacé lors de la première manip.
 
Pour lancer ces instructions, je me servirai d'une tâche cron qui exécutera le fichier bash.
J'ai par ailleurs eu des pistes avec l'instruction find mais il n'y a rien à faire, je n'arrive pas à faire fonctionner le find avec le rm.
 
Voilà. Je sèche lamentablement alors si quelqu'un pouvait me donner un tuyau, ça m'enlèverait un souci.
Merci et bonne journée,
 
Arnaud

Reply

Marsh Posté le 07-07-2008 à 11:48:39   

Reply

Marsh Posté le 07-07-2008 à 14:15:26    

Bonjour,

 

Et quelque chose de ce genre ?
# find repB -type d -maxdepth 0 | grep -v repAGarder| xargs rm -Rf
# cp -R repA/* repB

 

Attention, je n'ai pas testé !

 

vw


Message édité par Combi_A_Vendre le 07-07-2008 à 14:15:47
Reply

Marsh Posté le 07-07-2008 à 16:07:18    

il y a surement une option --exclude=fichier (à tester) pour rm (comme pour tar et rsync).


---------------
Si tu bois froid juste après le potage chaud, ça va faire sauter l'émail de tes dents - Monorailcat iz ohverin
Reply

Marsh Posté le 07-07-2008 à 17:24:51    

Re,
 
Je n'ai pas trouvé d'option de type exclude pour la commande rm.
Quant à la méthode qui m'a été proposée avec le grep et le xargs, je n'ai pas réussi à la faire fonctionner rapidement.
 
Comme je n'ai pas beaucoup de temps à consacrer à cette fonction en ce moment, j'ai opté pour la méthode radicale, à savoir la copie du répertoire que je veux garder dans une autre arborescence, la copie des fichiers puis la recopie du répertoire sauvegardé. C'est pas très beau mais ça fonctionne.
 
Je me pencherai sur une méthode plus jolie (notamment celle avec grep et xargs) pendant le calme des congés d'été...
 
Merci en tout cas pour vos réponses.
 
Arnaud

Reply

Marsh Posté le 07-07-2008 à 20:39:09    

Tu peux faire un :
 
#find /tonrep -type d ! -name pattern_a_exclure ?

Reply

Marsh Posté le 07-07-2008 à 21:37:34    

Cruchot a écrit :

Tu peux faire un :
 
#find /tonrep -type d ! -name pattern_a_exclure ?


 
Tout à fait, mais il faut utiliser maxdepth, sinon tu vas vider les répertoires qui sont à l'intérieur du répertoire à garder.
 
vw.

Reply

Marsh Posté le 08-07-2008 à 07:55:42    

tu fais un mov de ton sous-repertoire avant et après ton rm
 
au niveau du fs, c'est juste un node qui change, pas besoin de toucher à son contenu (tes fichiers de config)
 
et si ça marche pas comme tu veux et que t'es quand même obligé de copier les fichiers ! tu as une autre solution :
tu laisses ton repertoire de config quelquepart et tu fait un lien symbolique dessus dans ton repertoire de test. (commande ln -s)


Message édité par omicron le 08-07-2008 à 07:57:07
Reply

Marsh Posté le 08-07-2008 à 08:27:15    

Bonjour,
 
Oui j'avais pensé au lien symbolique omicron. Mais je vais avoir ensuite le problème de l'exclusion du fichier lors, non plus de la suppression, mais lors de la copie.
Je m'explique. Si je fais un lien symbolique que j'appelle du même nom que le répertoire (obligé bien sûr), que va-til se passer pour le lien lorsque je vais copier la totalité de l'autre répertoire. Est-ce que le lien ne va pas s'écraser ou est-ce qu'il ne va pas y avoir 2 répertoires du même nom ou plus exactement le répertoire copier + le lien ?

Reply

Marsh Posté le 08-07-2008 à 08:35:11    

pour rep A et B tu stocke ta config à dans des path à l'extérieur
chaque rep possede un lien symbolique X vers la config qu'il utilise
 
quand tu fais ton opération de réinitialisation :
tu effaces le contenu de B
tu copies le contenu de A vers B
tu effaces le lien X de B et tu recrées le bon lien X vers la config de B


Message édité par omicron le 08-07-2008 à 08:38:32
Reply

Marsh Posté le 08-07-2008 à 08:38:05    

ma solution du simple mv ne suffit pas ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed