Renommer plusieurs fichiers en bash

Résolu
Jeremyprog -  
 Jeremyprog -
Bonjour,
J'ai un dossier qui contient plusieurs fichiers texte.
popo.txt
lulu.txt
titi.txt

Je voulais renommer les fichiers en
doc1.txt
doc2.txt
doc3.txt


Je pense avec
rename
et une boucle mais je n'arrive pas à la structurer

Merci de votre aide :)

3 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Il faut itérer sur les fichiers de ton dossier en récupérant le résultat de la commande
    find
    . Au cours de cette itération, tu incrémentes un compteur qui te permettra de construire le nom des fichiers cibles. Puis tu fais le renommage avec
    rename
    ou
    mv
    .

    Le mieux est d'écrire un petit script (e.g.
    script.sh
    )

    #!/bin/bash
    i=0
    for f in $(find $1 | grep "txt$"); do 
        dir=$(dirname "$f")
        mv "$f" "$dir/doc$i.txt"
        i=$(($i+1))
    done


    On sauve, on quitte et depuis un terminal, on rend le script exécutable, et on prépare un petit test :
    chmod a+x script.sh
    mkdir -p toto
    touch toto/popo.txt toto/lulu.txt toto/titi.txt


    ... et on lance le script :

    (mando@silk) (~) $ ls toto/
    lulu.txt popo.txt titi.txt
    (mando@silk) (~) $ ./script.sh toto/
    (mando@silk) (~) $ ls toto/
    doc0.txt doc1.txt doc2.txt


    Bonne chance
    2
    1. Jeremyprog
       
      Un grand merci à toi pour ta réponse rapide et complète ça fonctionne parfaitement merci beaucoup
      0
      1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940 > Jeremyprog
         
        Parfait, bonne continuation :-)
        0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    enlever le -n si c'est ok
    $ rename -n 's/.+/our $i; sprintf("doc%d.txt", 1+$i++)/e' *.txt
    rename(lulu.txt, doc1.txt)
    rename(popo.txt, doc2.txt)
    rename(titi.txt, doc3.txt)
    1
  3. Jeremyprog
     
    Très intéressant en une seule ligne de commande Merci beaucoup ca fonctionne parfaitement :)
    0