Forum Linux.debian/ubuntu Copié fichier depuis liste de nom.

Posté par . Licence CC by-sa
Tags : aucun
1
13
déc.
2014

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 . Évalué à 3. Dernière modification le 13/12/14 à 18:39.

    tail -n +2 x.txt | head -n -1 | while read l ; do cp X.mp3 $l.mp3 ; done

    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 . É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 . Évalué à 2. Dernière modification le 15/12/14 à 14:41.

      Y aurait pas plus simple ?

      Un truc du genre

      while read l
      do
        cp X.mp3 "$l".mp3 
      done < x.txt```
      • [^] # Re: Comme ça :

        Posté par . É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

        [code]
        a
        b
        c
        d
        e
        f
        [/code]
        

        Please do not feed the trolls

        • [^] # Re: Comme ça :

          Posté par . É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 . É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 . É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) du fichier 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 à ceux qui les ont postés. Nous n'en sommes pas responsables.