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...
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