Forum Linux.débutant Renommer 566 fichiers avec un nombre incrémental

Posté par  .
Étiquettes : aucune
0
17
oct.
2006
Bonjour,

J'ai 566 fichiers à renommer sous la forme "pictXXXX.jpg" où XXXX est un nombre incrémental allant de 0584 à 1149.
J'ai cherché dans le man rename mais je ne connais pas du tout le perl, donc si quelqu'un pouvais me donner l'expression à mettre en argument de la commande rename ce serait cool.
Merci.

Rénald.
  • # avancons dans le schmilblik...

    Posté par  . Évalué à 1.

    tes fichiers sont-ils tous dans le meme dossier ?
    dans des dossiers et sous dossiers ?

    ont-ils tous la meme "forme" :
    ex : fichier1, fichier 2, fichier3

    bref peux tu nous donner qques infos supplementaires ?
  • # Clic Clic Clic...

    Posté par  . Évalué à 2.

    gThumb, et d'autre surement, permettent de le faire graphiquement.
    • [^] # Re: Clic Clic Clic...

      Posté par  (site web personnel) . Évalué à 2.

      Sous KDE, krename est excellent.

      (Sinon rename devrait permettre de faire de l'incrémental, mais je n'ai pas le man sous les yeux, désolé.)
  • # en shell !

    Posté par  . Évalué à 1.

    Bonjour,
    Un bon petit shell devrait te faire ça !
    Voici du code ci-dessous pour faire le renommage incrémental de photos (pas plus de 1000)

    #!/bin/bash
    getopts o: arg
    #echo $OPTARG
    #echo $arg
    if [ -z "$OPTARG" ] ; then
    echo "Usage : change_nom.sh -o nouveau_nom *jpg"
    exit 5
    fi

    typeset -i argc
    argc=`echo $* | wc -w`
    typeset -i it
    for var in "$@" ; do
    if [ -f "$var" ] ; then
    it=$it+1
    if [ "$argc" -le 99 ] ; then
    chaine=`printf "%2d\n" $it | tr ' ' '0'`
    else
    chaine=`printf "%3d\n" $it | tr ' ' '0'`
    fi
    NOM=$OPTARG"$chaine".jpg
    if [ -f "$NOM" ] ; then
    echo "Erreur risque d'écrasement"
    exit 5
    fi
    echo "mv $var $NOM"
    mv $var $NOM
    fi
    done
  • # En shell, rapide

    Posté par  . Évalué à 4.

    Une solution simple et concise en shell:


    [binarym@trait-plat]:/tmp/test% ls
    a.jpg b.jpg c.jpg d.jpg e.jpg
    [binarym@trait-plat]:/tmp/test% i=584; for file in *.jpg ; do mv $file $(printf %.4d $i).jpg; i=$((i+1)) ; done
    [binarym@trait-plat]:/tmp/test% ls
    0584.jpg 0585.jpg 0586.jpg 0587.jpg 0588.jpg
    [binarym@trait-plat]:/tmp/test%


    Sachant que printf te permet de forcer le 0 de début ( le '.' devant entre le % et le 4), et que $(( )) te permet de faire de l'arithmétique (attention, ceci ne fonctionne pas sous tout les shells, mais à coup sur sous bash et zsh).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.