Bonjour. Je voudrais savoir si avec linux il est possible de copié un meme fichier plusieurs fois dans un dossier avec un nom différent que j'ai dans une liste.
Je vais essayé de donné un exemple pour essayer d'etre plus claire.
J'ai un fichier x.txt qui contient ce texte
[code]
a
b
c
d
e
f
[/code]
Un fichier mp3 qui sp'alle X.mp3
Comment copié le fichier X.mp3 avec les différents nom contenue dans le fichier x.txt pour avoir dans un dossier les fichiers suivant
a.mp3
b.mp3
c.mp3
d.mp3
e.mp3
f.mp3
Merci
# Comme ça :
Posté par Zylabon . Évalué à 3. Dernière modification le 13 décembre 2014 à 18:39.
Peut être que c'est malin de remplacer cp par ln, comme ça, ça prendra moins de place mais si tu modifie un fichier, ça les modifiera tous.
Tu veux juste une commande pour faire le boulot ou tu veux aussi savoir comment ça marche ? N'hésite pas à demander si jamais :)
Please do not feed the trolls
[^] # Re: Comme ça :
Posté par wismerhill . Évalué à 5.
Et s'il y a des espaces, ou d'autres caractères spéciaux, dans ses noms de fichiers ça ne fonctionnera pas (voir cassera des choses).
Il faut mettre le $l entre guillemets.
[^] # Re: Comme ça :
Posté par totof2000 . Évalué à 2. Dernière modification le 15 décembre 2014 à 14:41.
Y aurait pas plus simple ?
Un truc du genre
[^] # Re: Comme ça :
Posté par Zylabon . Évalué à 2.
Holala… J'avais supposé que les balises étaient dans le fichier en question et qu'ils fallait les retirer… Je sais pas du coup
Please do not feed the trolls
[^] # Re: Comme ça :
Posté par totof2000 . Évalué à 2.
Effectivement, j'avais pas vu les balises. Donc dans ce cas un grep -v code fichier.txt | while read l serait plus simple.
# Zylabon merci.
Posté par tazbox . Évalué à 2.
Salut, Zylabon merci pour ton aide. Je veux bien des commentaire savoir comment la commande fonctionne, car je viens juste d'installer linux et j'ai beaucoup a apprendre et j'aime ça.
Pour la commande je l'ai essayé, donc j'ai fais un fichier .sh ou j'ai mis
tail -n +2 x.txt | head -n -1 | while read l ; do cp X.mp3 $l.mp3 ; done
et j'ai une erreur qui me dis ça
cp: la cible « 0001\r.mp3 » n'est pas un répertoire
cp: la cible « 0002\r.mp3 » n'est pas un répertoire
cp: la cible « 0003\r.mp3 » n'est pas un répertoire
….
[^] # Re: Zylabon merci.
Posté par Zylabon . Évalué à 3.
En gros, ça marche avec des flux de texte. Chaque commande a une entrée et une sortie, et on peut les brancher les unes aux autres avec
|
, un peu comme de la plomberie.tail -n +2 fichier
est une commande qui va recopier la "queue" (tail) dufichier
sur sa sortie, à partir de la seconde ligne (pour enlever le [code]. head (la tête) lit le fichier, sur son entrée, et le recopie intégralement, sauf la dernière ligne.read l
va lire une ligne, et la mettre dans une variable "l", ensuite, quand on écrit $l, le shell va remplacer $l par ce que read a mis dedans… Le tout est dans une boucle while pour le faire pour chaque ligne.Pour l'erreur… Aucune idée :) Chez moi ça marche…
Mon idée c'est que ça vient d'un problème d'encodage… C'est compliqué, sur windows, les lignes sont terminées par 2 caractère, \r (retour chariot) et \n (new line). les vielles imprimantes étaient grosso modo des machines à écrire automatisée. Sur linux, on ne met que le new line.
Cependant, j'ai essayé en remplaçant les \n du fichier x.txt par des \r\n, et ça marche toujours…
Peut être que tu peux essayer de lancer la commande
dos2unix x.txt
pour changer les \r\n par des \n. Sinon j'ai pas d'idée.Please do not feed the trolls
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.