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 08/04/2019, à 18:16

john25

Copier Liste / Coller Fichiers

Bonsoir,

Sur mon ordinateur, j'ai un dossier "home/moi/Musique".
Dans ce vaste dossier, je copie des musiques que je colle dans un dossier  "/home/moi/Musique/Compilation".
Ce dossier "/home/moi/Musique/Compilation", je le copie sur une clé USB pour écouter de la musique dans ma voiture.
La clé USB fait 32Go, j'ai donc 32Go de doublons sur mon disque dur et j'aimerai allouer cet espace à autre chose

Existe-t-il un moyen de copier le dossier "/home/moi/Musique/Compilation" sous un format texte (style xspf ou en passant par un script),
qui me permettrait de coller directement les musiques du dossier "home/moi/Musique" sur la clé USB ?


Merci par Avance !

Hors ligne

#2 Le 08/04/2019, à 18:38

Watael

Re : Copier Liste / Coller Fichiers

salut,

monte ta clé directement sous ~/Musique/Compilation
!?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 19/04/2019, à 10:10

john25

Re : Copier Liste / Coller Fichiers

Bonjour,
effectivement, je pourrais procéder ainsi, toutefois
j'écoute aussi le dossier "/home/moi/Musique/Compilation" chez moi sur l'ordinateur, avec la clef restée dans la voiture,
et parfois, je vide la clef USB en dehors de chez moi pour récupérer des fichiers chez un ami par exemple.
D'autre part, si ma clef USB crash, je perd la compilation... (principe de sauvegarde)


Merci par Avance !

Hors ligne

#4 Le 25/04/2019, à 15:52

john25

Re : Copier Liste / Coller Fichiers

Bonjour,

ls -p -R /media/CLEVOITURE > ~/Musique/CompilVoiture

me donne la liste des fichiers et dossiers musicaux.
Je ne trouve pas comment appeler cette liste pour qu'elle copie-colle les fichiers en question.


Merci par Avance !

Hors ligne

#5 Le 25/04/2019, à 16:33

erresse

Re : Copier Liste / Coller Fichiers

Pour créer la liste des fichiers et copier ensuite ces mêmes fichiers sur la clé.

ls ~/Musique/CompilVoiture > liste
for i in $(<liste); do cp "$i" /media/CLEVOITURE/; done

Sur l'ordinateur, tu pourrais ne conserver qu'un seul exemplaire de tes fichiers, avec juste la liste de ceux que tu veux copier sur ta clé. Lors de la copie, le système ira chercher chaque fichier là où il est enregistré et le copiera sur la clé...
big_smile


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#6 Le 25/04/2019, à 16:36

melixgaro

Re : Copier Liste / Coller Fichiers

Je ne crois pas que le

for i in $(<liste)

se comporte correctement en cas de nom de fichier avec espace. Un 'while read' est mieux.

Dernière modification par melixgaro (Le 25/04/2019, à 16:52)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#7 Le 25/04/2019, à 16:43

erresse

Re : Copier Liste / Coller Fichiers

C'est tout à fait possible, en effet, j'ai fait mes tests avec des fichiers bidon (f1 f2 f3...) sans me préoccuper des éventuels espaces dans les noms...
Mais donne l'exemple complet pour john25 qui n'a pas l'air de trop maîtriser le bash, ce sera sympa.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#8 Le 25/04/2019, à 16:56

melixgaro

Re : Copier Liste / Coller Fichiers

while read nom
do
echo cp -iv "${nom}" /media/CLEVOITURE/
done < liste

ou en ligne

while read nom; do echo cp -iv "${nom}" /media/CLEVOITURE/; done < liste

J'ai mis l'option i à la commande cp pour éviter l'écrasement de fichier (remplace -iv par -v si tu t'en fiches). J'ai mis un echo devant cp pour que tu vois ce que ça fait avant d'exécuter les actions réellement. Enlève le echo si ça te convient.


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#9 Le 25/04/2019, à 17:03

john25

Re : Copier Liste / Coller Fichiers

erresse a écrit :

Sur l'ordinateur, tu pourrais ne conserver qu'un seul exemplaire de tes fichiers, avec juste la liste de ceux que tu veux copier sur ta clé. Lors de la copie, le système ira chercher chaque fichier là où il est enregistré et le copiera sur la clé...

Oui!! c'est exactement ça que je veux smile

erresse a écrit :

donne l'exemple complet pour john25 qui n'a pas l'air de trop maîtriser le bash

Je viens de découvrir "ls" donc effectivement

melixgaro a écrit :

Un 'while read' est mieux.

je comprend pas.

Ca :

ls ~/Musique/CompilVoiture > liste
while read; do cp "$i" /media/CLEVOITURE/; done

?
Je me doute que l'argument "$i" n'a pas de condition ainsi, sans bien comprendre la commande de erresse.


Merci par Avance !

Hors ligne

#10 Le 25/04/2019, à 17:11

melixgaro

Re : Copier Liste / Coller Fichiers

Tu as du louper mon message (le 8). Lis-le bien et n'hésite pas à poser des questions. J'ai mis le même code en version multi-lignes (le premier bloc ; pour mieux lire les instructions et pour une inclusion propre dans un script) et en version mono-ligne (le deuxième bloc ; pour un copier-coller direct vers le terminal).


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#11 Le 25/04/2019, à 17:45

erresse

Re : Copier Liste / Coller Fichiers

@john25:
Tu as peut-être remarqué que la liste obtenues par la commande "ls ... > liste" n'est en fait qu'une suite de noms de fichiers à raison d'un nom par ligne...

fich 1
fichier_2
f-3
...

Il est donc très facile de te créer la liste des fichiers que tu veux exporter avec simplement ton éditeur de texte ("gedit" sous Ubuntu par exemple) en écrivant un nom de fichier par ligne. À noter que chaque ligne devrait contenir le chemin d'accès en plus du nom du fichier, sauf si tu exécutes la commande (ou le script) en te plaçant d'abord dans le répertoire qui contient les fichiers à copier.

~/Musique/fich 1
~/Musique/fichier_2
~/Musique/f-3
...

Tu enregistres alors cette liste et tu pourras ensuite l'utiliser dans la commande exactement comme si elle avait été générée par "ls ... > liste".
Cela peut économiser beaucoup de place sur le disque si tu ne dupliques pas les fichiers eux-mêmes...
Et, pour recomposer ta "play-list", il te suffira de modifier cette liste avec ton éditeur de texte, ultérieurement.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#12 Le 27/04/2019, à 16:51

john25

Re : Copier Liste / Coller Fichiers

Bonjour,

melixgaro a écrit :

Tu as du louper mon message (le 8). Lis-le bien et n'hésite pas à poser des questions.

J'étais en train de taper quand tu as publié ton message, on s'est croisé.

melixgaro a écrit :

Lis-le bien et n'hésite pas à poser des questions

J'essaye de comprendre :

while read nom

tu vas lire les {noms des fichiers un à un jusqu'à ce qu'il n'y en ai plus} dans l'instruction qui arrive

do

voici l'instruction

cp -iv "${nom}" /media/CLEVOITURE/

copie -sans écraser les fichiers et en affichant leur noms, les {noms dont on a parlé} présent /dans clévoiture,

done < liste

l'instruction est fini, fais un fichier liste avec ça.


j'ai essayé dans le terminal de taper

while read nom; do  cp -iv "${nom}" /media/CLEVOITURE/; done < ~/liste.txt

mais je me retrouve avec un fichier liste.txt vide.

En lisant ton bash, je ne comprends pas à quel moment les fichiers sont appelés dans le dossier d'origine.
En fait, je crois que je n'ai rien compris... roll
il faut rajouter ~/Musique à while read nom ?

while read nom ~/Musique
Erresse a écrit :

Cela peut économiser beaucoup de place sur le disque si tu ne dupliques pas les fichiers eux-mêmes...
Et, pour recomposer ta "play-list", il te suffira de modifier cette liste avec ton éditeur de texte, ultérieurement.

j'avais bien imaginé que c'était possible, sans savoir comment,
et ça m'arrange bien.

En tout cas vous avez bien compris que je suis pas à l'aise avec le bash..

Merci à vous deux.


Merci par Avance !

Hors ligne

#13 Le 27/04/2019, à 17:02

erresse

Re : Copier Liste / Coller Fichiers

Effectivement, dans la procédure de melixgaro, tu as compris de travers le fonctionnement...
En fait, le fichier "~/liste.txt" est en entrée de la boucle while, il faut comprendre qu'il a été créé ou généré avant.
Dans cette boucle, pour chaque ligne lue dans le fichier "liste.txt", on va copier le fichier indiqué (chemin complet et nom du fichier compris, donc éventuellement dans ~/Musique) vers la clé qui est montée sur "/media/CLEVOITURE/".
La boucle s'effectuera jusqu'à ce que toutes les lignes contenues dans "liste.txt" aient été lues.
Est-ce que ça te paraît plus clair ainsi ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#14 Le 27/04/2019, à 17:28

john25

Re : Copier Liste / Coller Fichiers

ok, je crois mieux comprendre. Il me manque le fichier liste donc

ls -p -R /media/CLEVOITURE > ~/Musique/CompilVoiture

créé le fichier répertoriant tout ce qu'il y a dans la clévoiture.

Dans ce fichiers, à l'aide de gedit et la fonction rechercher remplacer,
je change tous les /media/CLEVOITURE en ~/Musique.
Je sauvegarde mon fichier (d'une part, je peux à partir de ce moment, si besoin, formater la clévoiture,
d'autre part, je peux modifier la compilation en mode texte, en ajoutant ou supprimant des lignes dans le fichier ~/Musique/CompilVoiture).

Quand je veux reconstituer la compilation dans la clévoiture, dans le terminal, je fais :

while read nom; do cp -iv "${nom}" /media/CLEVOITURE/; done < ~/Musique/CompilVoiture

le "-i" me sert, par exemple, si la compilation est encore sur la clévoiture, de tout écraser pour mettre la nouvelle compil.
J'ai bon cette fois ?


Merci par Avance !

Hors ligne

#15 Le 27/04/2019, à 17:44

erresse

Re : Copier Liste / Coller Fichiers

Oui, tout à fait !
big_smile


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#16 Le 27/04/2019, à 18:03

melixgaro

Re : Copier Liste / Coller Fichiers

Salut,

Désolé d'avoir été un peu avare en explication mais ça t'a motivé pour chercher et comprendre wink Bravo !
En effet, je supposais que le fichier nommé 'liste' était déjà créé. Le

'while read nom'
+
'done < liste'

fait que chaque ligne du fichier liste sera stockée dans la variable nom à chaque tour de la boucle while. C'est la ligne complète qui est passée, d'où l'importance de n'avoir qu'un seul nom de fichier par ligne. L'avantage de faire ainsi (par rapport à la boucle for proposée par erresse) est que la variable 'nom' contiendra toujours le nom complet du fichier même si le nom de ton fichier musical contient un ou plusieurs espace. Avec la bouche for, chaque mot séparé par des espaces auraient été assignés à la variable de la boucle (appelée i par erresse). Un fichier nommé "La marseillaise.mp3" aurait donné :
premier tour de boucle for : i = La
deuxième tour de boucle for : i = marseillaise.mp3

Avec la boucle while, par contre :
premier tour de boucle while : nom = La marseillaise.mp3

Si tes noms de fichiers ne contiennent pas d'espace, la solution avec la boucle for peut marcher… mais ça n'est pas la bonne manière de faire. Donc autant prendre les bonnes habitudes et utiliser 'while read'.

L'option 'i' de la commande cp rend le processus interactif (i comme interactif). Ce qui fait que si un fichier de nom identique existe dans le dossier destination, cp te demandera quoi faire (sauter le fichier ou écraser). Ça évite des catastrophes, surtout quand on est en train de mettre au point un script. Le problème est que s'il y a 200 doublons, tu devras répondre 200 fois à la question de cp. Dans ce cas, il faudra faire les choses différemment. Si tu t'en fiches d'écraser ou si la situation ne peut pas se produire, tu peux très bien enlever l'option i.

Tape

man cp

pour en savoir plus sur la commande cp et ses options.


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#17 Le 27/04/2019, à 18:22

john25

Re : Copier Liste / Coller Fichiers

Ok là j'ai bien tout compris.
j'avais un tour sur "man cp" avant de revenir poster mon interprétation (foireuse) de ton script.
D'ici à ce que je comprenne tous les tenants et aboutissants des variables possibles pour cp,
il y aura quelques gigaoctets de questions à propos de "cp" sur le forum  ..

Bon, j'ai plus qu'à mettre en oeuvre (demain).
Etant donné que vous avez été patient et pédagogue,
je devrais pas rencontrer de problème.

Bref, merci beaucoup Erresse et Melixgaro
pour vos explications et pour ce script
(qui va sûrement me servir pour d'autres dossiers).


Merci par Avance !

Hors ligne

#18 Le 07/06/2019, à 09:09

john25

Re : Copier Liste / Coller Fichiers

hello, je reviens vers vous pour ajouter une précision.

while read nom; do cp -iv "${nom}" /media/CLEVOITURE/; done < ~/Musique/CompilVoiture

Cette commande ne permet pas de copier les dossiers, uniquement des fichiers. Il faut ajouter "-r".
En effet, dans la compilation j'ai également des albums, ou des discographies.

Mon arborescence est de type : ~/Musique/Artiste/Album/Artiste - 01 - Morceau.flac
Donc si je veux copier ~/Musique/Artiste/ ou ~/Musique/Artiste/Album/, la commande devient :

while read nom; do cp -riv "${nom}" /media/CLEVOITURE/; done < ~/Musique/CompilVoiture

Voilà, si ça peut aider...


Merci par Avance !

Hors ligne

#19 Le 07/06/2019, à 15:19

erresse

Re : Copier Liste / Coller Fichiers

john25 a écrit :

En tout cas vous avez bien compris que je suis pas à l'aise avec le bash..

Et tu vois que c'est déjà moins vrai...
Il suffit de creuser un peu le sujet qui t'intéresse et ça accroît forcément ton bagage !
big_smile


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne