#1 Le 22/03/2017, à 21:47
- qolepam
comment copier/coller plusiurs fichiers listés dans le terminal?
bonjour,
Après avoir fait dans le terminal d'Ubuntu un find,récursif sur Dossier/*,j'obtiens une liste L exclusive de fichiers avec leur extension.
Tout le monde sait qu'en écrivant dans le terminal:
cp Dossier1/fichier1.ext1 Dossier2/fichier2.ext2 Dossier3/fichier3.ext3 DossierDestination/
je copie les fichiers 1,2 et 3 dans le DossierDestination
Ma question:
Après avoir fait un copier/coller de la liste L,en utilisant soit | ou .exec,comment écrire la bonne syntaxe en 1 seule commande pour copier tous les fichiers de la liste L vers un DosssierDestination?
du genre : cp ............,? DossierDestination/
merci de votre aide
Hors ligne
#2 Le 22/03/2017, à 21:58
- melixgaro
Re : comment copier/coller plusiurs fichiers listés dans le terminal?
Salut,
si tu utilises find pour trouver les fichiers en questions, le mieux est peut-être de demander à find de copier les fichiers. Cela peut se faire avec l'option -exec de find. Exemple de syntaxe
find . -iname "*.py" -exec echo cp -aiv "{}" Downloads/ \;
Avec cette commande je cherche tous les fichiers avec l'extension .py (option -iname permet une recherche insensible à la casse) puis je demande à find de copier ces fichiers dans le dossier Downloads.
Remarque 1 : en fait, ici, à cause du echo, la commande va imprimer à l'écran :
cp -aiv fichier1.py Downloads/
cp -aiv fichier2.py Downloads/
etc
C'est pour que tu te rendes compte de l'effet de la commande proposée. Si ça te convient, relance là en enlevant le echo.
Remarque 2 : la commande doit se terminer par espace + contre-oblique + point-virgule, donc par ' \;'
Remarque 3 : cp -aiv permet de copier en gardant les droits et l'horodatage intacts (option -a), de dire ce qu'elle fait (option -v), et de demander quoi faire en cas de collision de noms (option -i)
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#3 Le 22/03/2017, à 22:52
- qolepam
Re : comment copier/coller plusiurs fichiers listés dans le terminal?
merci bien !
Mais à quoi sert ou que veut dire le point après find et espace,avant -iname?
Hors ligne
#4 Le 22/03/2017, à 23:13
- melixgaro
Re : comment copier/coller plusiurs fichiers listés dans le terminal?
l'argument qui suit 'find' est le dossier à partir duquel on fait la recherche (en descendant tous les sous-dossiers). Ici, le point indique que je démarre la recherche depuis le répertoire où je lance la commande. J'aurais pu écrire
find /media/utilisateur/dosier1/Dossier2/ -iname "*.py"
pour chercher tous les fichiers .py à partir du dossier /media/utilisateur/dosier1/Dossier2/
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#5 Le 22/03/2017, à 23:31
- qolepam
Re : comment copier/coller plusiurs fichiers listés dans le terminal?
Non!
point ou sans point après le find,la commande ne déplace pas tous les fichiers vers Download.
Par contre,après avoir lancé:
find . -iname "*.py" -exec echo cp -aiv "{}" Downloads/ \;
puis avoir copié une des lignes commençant par cp,cela marche pour la copie d'un fichier=exécution d'1 ligne
En fait,l'exécution successive de chaque ligne semble ne pas marcher!Pourquoi?
Hors ligne
#6 Le 23/03/2017, à 00:35
- melixgaro
Re : comment copier/coller plusiurs fichiers listés dans le terminal?
je t'ai clairement indiqué que la commande que je te donne va simplement afficher sur le terminal ce qui va se passer. C'est à cause du 'echo' après le '-exec' et devant le 'cp'.
Mon conseil est que tu adaptes la commande ci-dessus à tes besoins en gardant le 'echo'. Tu vérifies que ça va bien faire ce à quoi tu t'attends. Si c'est le cas, tu la relances en enlevant le 'echo', ce qui donnerait quelque chose comme ça :
find . -iname "*.py" -exec cp -aiv "{}" Downloads/ \;
Linux depuis ~2007. Xubuntu seulement.
Hors ligne