Copié fichier depuis liste de nom.

Copié fichier depuis liste de nom. - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 13-12-2014 à 17:12:08    

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 :
  1. a
  2. b
  3. c
  4. d
  5. e
  6. f


 
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

Reply

Marsh Posté le 13-12-2014 à 17:12:08   

Reply

Marsh Posté le 13-12-2014 à 17:30:10    

en shell, avec une boucle du genre :
while read ligne; do cp X.mp3  $ligne.mp3; done < x.txt
 
http://www.commentcamarche.net/faq [...] -par-ligne


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 13-12-2014 à 17:41:40    

Merci pour ta réponse Mjules. Tu pourais stp essayé de m'aider un peux plus. Car je t'avoue que je n'y connais pas grand chose avec linux. On m'a juste dis que si je voulais faire ça, vaudrait mieux que je passe par linux, donc je l'ai installer dans une machine virtuel.  
 
J'ai essayer de tapper while read ligne; do cp X.mp3  $ligne.mp3; done < x.txt  dans la console d'ubuntu mais j'ai eu l'erreur suivante.
 

Code :
  1. cp: la cible « 0001\r.mp3 » n'est pas un répertoire
  2. cp: la cible « 0002\r.mp3 » n'est pas un répertoire
  3. cp: la cible « 0003\r.mp3 » n'est pas un répertoire
  4. cp: la cible « 0004\r.mp3 » n'est pas un répertoire


Reply

Marsh Posté le 13-12-2014 à 23:17:53    

eh, ben... si "on" te dit de souder deux fils électriques pour allumer une ampoule, tu vas acheter un poste oxyacétylène ?
 
il faut chercher un peu !
"Windows lire fichier ligne par ligne"
 
Je n'utilise plus W$ depuis ~15 ans, et j'ai mis 5 mn pour trouver un code qui devrait fonctionner sur W$ :

Code :
  1. for /f "delims=" %%i in ('type fichier.txt') do cp %%i %%i.mp3

à peu près, parce que je n'ai pas de W$ pour tester.

Reply

Marsh Posté le 14-12-2014 à 10:53:23    

Code :
  1. [neji@nightingale test]$ ls -1
  2. X.mp3
  3. x.txt


 

Code :
  1. for _file_ in $(cat x.txt)
  2. do
  3. cp X.mp3 ${_file_}.mp3
  4. done


 

Code :
  1. [neji@nightingale test]$ ls -1
  2. a.mp3
  3. b.mp3
  4. c.mp3
  5. d.mp3
  6. e.mp3
  7. f.mp3
  8. X.mp3
  9. x.txt


 
C'est juste ça que tu voulais faire ?
 
Sous Windows aussi ça se fait simplement:
 

Code :
  1. for /f %%X in (x.txt) do (
  2. copy X.mp3 %%X.mp3
  3. )


 


---------------
Le Topic Unique des collections de cartes graphiques - GPUCHAN.ORG
Reply

Marsh Posté le 21-12-2014 à 02:04:15    

Code :
  1. cat x.txt | xargs -I {} cp X.mp3 {}.mp3


---------------
Ravèt pa janmen ni rézon douvan poul
Reply

Marsh Posté le 21-12-2014 à 12:23:08    

uuoc!

Code :
  1. xargs -I µ cp X.mp3 µ.mp3 <x.txt

Reply

Marsh Posté le 21-12-2014 à 13:01:09    


Ok, Microsoft Windows c'est un "Linux et OS Alternatifs" :sarcastic:
Après par rapport au contexte, ça peut se faire aussi sur Windows, c'est probablement aussi pour apprendre à coder "qu'on" lui a dit de le faire sur Linux.

 

Après le code de MJules fonctionne chez moi, mais il faudrait voir le contenu de ton fichier "x.txt", et son format. Je soupçonne une erreur de lecture CR/LF...
Un petit

tr -d '\r' < x.txt > x_lin.txt


et utiliser x_lin.txt plutôt que x.txt pour le code (source du code : ici)


Message édité par bardiel le 21-12-2014 à 13:02:28

---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 21-12-2014 à 13:55:09    

Citation :

On m'a juste dis que si je voulais faire ça, vaudrait mieux que je passe par linux[...]

moi, j'entends : «Windows n'est pas capable de faire ça (simplement), vaudrait mieux [...] passe[r] par linux».
mais bon.
saura-t-on jamais ce qu'il en est réellement ? reverra-t-on Cetaubofix pour nous informer du succès de nos solutions ? ...
 

Code :
  1. tr -d '\r' <x.txt | xargs -I µ cp X.mp3 µ.mp3

et hop, plus de fichier temporaire !

Reply

Marsh Posté le 19-04-2015 à 15:04:58    

Salut.
 
Je cherche à faire la meme chose. J'ai essayé toutes vos commande et elles fonctionnent bien. Le seul probleme c'est qu'avant le . de l’extension j'ai un espace.
 
Par exemple au lieu d'avoir a.mp3 j'ai a .mp3
 
J'ai essayez les commandes suivante
 
 

Code :
  1. while read line ; do cp x.mp3 "${line}.mp3" ; done <x.txt


 

Code :
  1. xargs -I µ cp X.mp3 µ.mp3 <x.txt


 
Tous ca fonctionne bien, mais l'espace pause probleme.  
 
Sauriez vous d'ou cela vient ?  Ma liste est en fichier txt, j'ai essayé de changer le .txt en .csv, voir si le problème vient de la liste. Mais ca n'a rien changer.
 
 
 

Reply

Marsh Posté le 19-04-2015 à 15:04:58   

Reply

Marsh Posté le 19-04-2015 à 21:56:48    

salut,
 
comment as-tu récupéré cette liste de fichiers dans un fichier (x.txt) ?

Reply

Marsh Posté le 20-04-2015 à 13:35:17    

Ouvre ton fichier de nom dans vim et tape cette commande :  
":%s/ //g"  
Ensuite tu sauves (:wq) et tu relances ton script.

Reply

Marsh Posté le 20-04-2015 à 13:45:19    

ouaip, comme ça tous les espaces seront supprimés, même ceux qui pourraient figurés dans le nom d'un fichier :(
il vaut mieux stipuler qu'on veut supprimer uniquement ceux qui figurent en fin de ligne !

Code :
  1. :%s/ \+$//

Reply

Marsh Posté le 20-04-2015 à 17:08:15    

netmonk a écrit :

Ouvre ton fichier de nom dans vim et tape cette commande :  
":%s/ //g"  
Ensuite tu sauves (:wq) et tu relances ton script.


Sinon y a sed pour ça :o


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 20-04-2015 à 19:43:57    

Watael très juste ! :)  
 
O'gure ? There is more than one way to do it ! en Perl aussi, en awk, en tr, en python...
 
Pas la peine de voir rouge pour un gars qui a installé une ubuntu spécialement pour cette manip.  
(alors qu'il pouvait le faire en shell windows par ailleurs et comme précisé antérieurement)


Message édité par netmonk le 20-04-2015 à 19:45:39
Reply

Marsh Posté le 24-04-2015 à 14:18:38    

Il y a aussi cygwin pour avoir un shell "unix" sous Windows, et d'autres façons mais bon la VM sous linux ça se fait, vous me donnez l'impression qu'on est en 1997 et que c'est très choquant de gaspiller tous ces gigaoctets et tout ce CPU :lol:.
 
Pour les conversions de fichier entre format windows et unix, au lieu de faire ça à la main on peut aussi utiliser le programme "dos2unix".
 
Au lieu de faire une ligne à rallonge telle que

while read line ; do cp x.mp3 "${line}.mp3" ; done <x.txt

on peut essayer d'écrire ça dans un script :
 


#!/bin/bash
 
while read line ; do
            cp x.mp3 "${line}.mp3"
done  < fichier.txt

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed