Bonjour,
j'ai un dossier contenant des sous-dossiers dont certains sont des archives (contiennent le terme ".arc_" dans leur intitulé).
|- dossier_source
|- toto_01092017|- fichier1.txt|- fichier2.txt|- fichier3.txt|- toto.arc_01092017|- toto_02092017|- toto_03092017|- toto.arc_03092017|- toto_04092017|
|- dossier_cible
|
Je souhaiterai copier dans "dossier_cible", les dossiers de "dossier_source" qui ne sont pas des archives.
J'avais commencé par utiliser la commande ci-dessous :
Mais en ajoutant un echo dans le exec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part find /CheminVers/dossier_source -type d ! -name "*.arc_*" -exec cp -r '{}' /CheminVers/dossier_cible \;
je me suis aperçue que dans les commandes de copie qui seront exécutées, la première aura pour conséquence de copier tout le contenu du dossier source dans le dossier cible (ce que je ne veux pas). Les autres commandes de copie sont bien celles auxquelles je m'attendais (copie des dossiers ne contenant pas ".arc_").
Code : Sélectionner tout - Visualiser dans une fenêtre à part find /CheminVers/dossier_source -type d ! -name "*.arc_*" -exec echo cp -r '{}' /CheminVers/dossier_cible \;
Exemple de commandes retournées :
Pour remédier à ça, j'ai essayé d'ajouter l'option "- mindepth 1". La liste des commandes correspond bien à celle que j'attendais (--> la même liste mais sans la ligne qui copie tout) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 cp -r /CheminVers/dossier_source /CheminVers/dossier_cible cp -r /CheminVers/dossier_source/toto_01092017 /CheminVers/dossier_cible cp -r /CheminVers/dossier_source/toto_02092017 /CheminVers/dossier_cible [...]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 cp -r /CheminVers/dossier_source/toto_01092017 /CheminVers/dossier_cible cp -r /CheminVers/dossier_source/toto_02092017 /CheminVers/dossier_cible [...]
Sauf que quand j'exécute la commande (en supprimant le echo du exec), le programme copie le contenu du premier dossier trouvé par le find dans le dossier cible. Cela donne :
|- dossier_source
|- toto_01092017|- fichier1.txt|- fichier2.txt|- fichier3.txt|- toto.arc_01092017|- toto_02092017|- toto_03092017|- toto.arc_03092017|- toto_04092017|
|- dossier_cible
|- fichier1.txt|- fichier2.txt|- fichier3.txt|- toto.arc_01092017|- toto_02092017|- toto_03092017|- toto.arc_03092017|- toto_04092017|
A l'exception du dossier "toto_01092017" pour lequel seuls les fichiers sont copiés à la racine de "dossier_cible", tous les autres dossiers sont correctement copiés donc je me dis que la commande de copie est correctement formée...
Quelqu'un verrait-il ce qui m'échappe et comment je peux corriger ma commande "find" pour obtenir le résultat escompté (i.e que le dossier "toto_01092017" soit copié mais pas uniquement son contenu) ?
Je pourrais contourner le problème en redirigeant les lignes de copie dans un fichier dans lequel je supprimerai la première ligne avant d'en exécuter le contenu, mais peut-être quelqu'un saura me dire où est le problème dans ma commande "find"...
Je vous remercie par avance pour votre aide ou vos conseils.
Nanou
Partager