Astuces.divers : [Terminal] Exclure un sous-dossier d'une copie recursive

Posté par Jérôme Pinot (page perso, ) le 12 septembre 2005
0
Objectif :

Vous avez un dossier bien rempli que vous souhaitez dupliquer à un autre endroit à l'exception d'un des sous-dossiers, par exemple parce qu'il est tres volumineux.



Probleme :

Il n'y a pas d'option d'exclusion à la commande "cp" et il peut être fastidieux de devoir copier ou déplacer le sous-dossier en question. Il est parfois necessaire d'avoir une alternative.



Solution :

Soit DIR le dossier a copier, SOUSDIR le dossier a exclure et DESTDIR le dossier qui recevra la copie :



$ cd /chemin/vers/DIR/..

$ find DIR -path '*SOUSDIR*' -prune -o -print -exec cp -r {} DESTDIR/{} \;




Ainsi, vous ne copiez qu'une seule fois les fichiers.



Il est egalement possible d'utiliser "tar" qui possede une option d'exclusion (merci daemoOon<) mais qui oblige globalement à copier 2 fois "DIR-SOUSDIR" ce qui peut être long en fonction des données.



Merci aussi à zragg< qui m'a mis sur la voie.

> Lire le message (4 commentaires, moyenne: 1,3).  

Vous avez demandé le commentaire #921683.

une autre piste avec find...

Posté par xylo (page perso, ) le 10/04/2008 à 19:11. (lien). Évalué à 1.

Objectif:
Copier l'ensemble des fichiers et des dossiers d'un directory en excluant le dossier exclud_dir

1) se placer dans le dossier qui contient les sources
2) pour test avec la fonction echo:
find . \( ! -name "exclud_dir" \) -exec echo {} \;

3) remplacer la fonction echo par la fonction cp

--
'Content de peu n'a rien à craindre'
http://jm.marino.free.fr