Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/03/2017, à 22: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, à 22: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, à 23: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 23/03/2017, à 00: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 23/03/2017, à 00: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, à 01: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