Renommer plusieurs fichiers en meme temps

Résolu
artagon7 Messages postés 423 Statut Membre -  
 unpassant -
Bonjour,

Je voudrais savoir si il est possible dans les deux differents cas suivants de changer les noms de plusieurs fichiers au moyen d'UN SEUL script ou d'UNE SEULE commande.

Cas A

Dans le repertoire X, j'ai, par exemple, 100 fichiers suivants :

avril_mesures_001
avril_mesures_002
.. .. .. ..
avril_mesures_100


Comment changer les noms d'un seul coup par

avril_calculs_001
avril_calculs_002
.. .. .. ..
avril_calculs_100


au moyen d'un seul script?

Cas B

Dans le repertoire Y, j'ai les trois fichiers suivants :

orange.rtf
peche.rtf
pomme.rtf


Est-ce qu'il est possible que je puisse les renommer respectivement par :

fruit_001.rtf {orange.rtf}
fruit_002.rtf {peche.rtf}
fruit_003.rtf {pomme.rtf}


au moyen d'un seul script?

Merci
Configuration: Linux
Konqueror 3.5

9 réponses

  1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    Bonsoir,

    Cas A, c'est possible bien sur.

    Soit en une seule commande, rename si elle est disponible sur ton système.
    $ rename mesures calculs avril_mesures_*
    Ou part un simple script sinon:
    #!/bin/bash
    for file in *_mesures_*; do
    mv $file ${file/mesures/calculs}
    done
    Voir le manuel de bash (man bash) pour les information sur la substitution, d'autre outils existent (sed, awk, etc.) pour faire quelque chose de similaire, mais ce script fonctionnera pour peu que /bin/bash soit présent. :)

    Pour le cas B en revanche, je ne voit pas trop ou tu souhaite arriver.
    Si 001 -> orange, 002 ->pêche, 003 -> pomme et si la liste n'est pas trop longue, il te faudrait un fichier de correspondance...

    exemple:
    $ cat correspondace.lst rename_fruits.sh 
    001:orange
    002:peche
    003:pomme
    
    $ cat rename_fruits.sh
    #!/bin/bash
    for file in fruit*; do
    ref=$(echo $file | sed -r 's/fruit_([0-9]{3}).rtf/\1/')
    mv $file $(grep $ref correspondace.lst |cut -f2 -d':').rtf
    done

    Voir man sed, man cut

    Cordialement

    15
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut asevere,

      en 2006 j'ai donné une solution avec rename renomer liste fichier linux mais il y a des gens qui font allergie à Perl :-DDD
      0
      1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        Salut Lami,

        Je me suis fais avoir aussi une fois, mais c'était pas perl c'était la non exsitance de cette commande sur tout les os linux/unix/bsd/* donc maintenant, je précise :)

        @+
        0
    2. unpassant
       
      Merci, j'avais besoin du cas A et ca mù'a bien facilité la tâche. Merci !
      0
  2. artagon7 Messages postés 423 Statut Membre 7
     
    Bonjour,

    Je donne ici la solution à un problème (le cas B) que j'avais posé il y a cinq mois. Il s'agissait de renommer tous les fichiers présents dans un répertoire donné de façon ordonnée numériquement. Je dois spécifier que la solution ne vient pas de moi (malheureusement ...) mais de quelqu'un d'autre. Voici le script :

    #! /bin/bash
    #
    #**** Script renommer_fichiers_par_lot.sh *****
    #
    # Description : Script qui renomme tous les fichiers présents dans un répertoire
    # donné de façon ordonnée numériquement en incluant un nom commun.
    #
    rep="/media/sda5/Informatique/Test"
    mot="fruit"
    cd "$rep"
    num=1
    for fichier in ${rep}/* ; do
    if "$num" -lt "10"; then
    mv "$fichier" ${mot}_00${num}.rtf
    else
    if "$num" -lt "100"; then
    mv "$fichier" ${mot}_0${num}.rtf
    else
    mv "$fichier" ${mot}_${num}.rtf
    fi
    fi
    ((num=num+1))
    done

    Si ce fut utile pour moi, ca peut l'etre pour d'autres egalement ...
    4
  3. jeanbi Messages postés 15399 Date d'inscription   Statut Contributeur Dernière intervention   2 383
     
    bonjour,
    et pour ceux qui sont allergique à la ligne de commande
    Metamorphose
    https://framalibre.org
    a+
    4
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Cas A
    for i in $(ls avril_mesures_*);do mv -v $i ${i%%_*}_calculs_${i##*_};done 
    3
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Le premier lien que tu m'as donné lami20j n'a pas rapport avec le problème que j'avais posé.
    je n'avais même pas pensé à ça :-)) c'était juste la suite de jeanbi
    en revanche voici une solution, j'espère que ça te conviendra
    $ ls -1t
    fraise.rtf
    prune.rtf
    framboise.rtf
    poire.rtf
    cerise.rtf
    banane.rtf
    abricot.rtf
    pomme.rtf
    peche.rtf
    orange.rtf
    $ for fic in $(ls -t);do i=$(($i+1)); mv -v $fic $(printf "fruit_%03d.rtf{$fic}" $i);done && unset i
    `fraise.rtf' -> `fruit_001.rtf{fraise.rtf}'
    `prune.rtf' -> `fruit_002.rtf{prune.rtf}'
    `framboise.rtf' -> `fruit_003.rtf{framboise.rtf}'
    `poire.rtf' -> `fruit_004.rtf{poire.rtf}'
    `cerise.rtf' -> `fruit_005.rtf{cerise.rtf}'
    `banane.rtf' -> `fruit_006.rtf{banane.rtf}'
    `abricot.rtf' -> `fruit_007.rtf{abricot.rtf}'
    `pomme.rtf' -> `fruit_008.rtf{pomme.rtf}'
    `peche.rtf' -> `fruit_009.rtf{peche.rtf}'
    `orange.rtf' -> `fruit_010.rtf{orange.rtf}'
    $ ls -1t
    fruit_001.rtf{fraise.rtf}
    fruit_002.rtf{prune.rtf}
    fruit_003.rtf{framboise.rtf}
    fruit_004.rtf{poire.rtf}
    fruit_005.rtf{cerise.rtf}
    fruit_006.rtf{banane.rtf}
    fruit_007.rtf{abricot.rtf}
    fruit_008.rtf{pomme.rtf}
    fruit_009.rtf{peche.rtf}
    fruit_010.rtf{orange.rtf}
    
    1
  7. artagon7 Messages postés 423 Statut Membre 7
     
    lami20j, je viens d'essayer ta solution et effectivement ca fonctionne tres bien. Moi, je l'ai mis dans un script. De plus, elle est beaucoup plus courte que la solution de l'autre personne.

    Pendant que tu es la, je vais en profiter pour te soumettre un autre probleme concernant le tri d'un fichier (probleme beaucoup plus complexe celui-la).

    Je vais etre de retour dans environ dix minutes ...
    1
  8. artagon7 Messages postés 423 Statut Membre 7
     
    Merci pour vos reponses. Je vais essayer les diverses solutions proposees.

    Merci beaucoup
    0
  9. artagon7 Messages postés 423 Statut Membre 7
     
    Bonjour lami20j,

    Le premier lien que tu m'as donné lami20j n'a pas rapport avec le problème que j'avais posé. Tout ce qu'ils ont en commun c'est qu'il renomme les fichiers. Le probleme auquel tu fais reference apporte la même substitution pour tous les fichiers alors que le mien necessite une substitution nouvelle pour chaque fichier.

    Ton second lien fait référence cette fois-ci au problème que j'avais pose.

    En lisant ton second lien, j'ai constaté qu'il y avait des intervenants pas très polis!

    Citation : "mais si tu ne veux pas m'aider tu as juste à ne pas répondre." Hummmm!

    Tu sembles avoir pris la remarque avec un grain de sel! Tant qu'a moi il aurait sêché!

    Salutations lami20j
    0