• # Re: Pour renommer des fichiers avec des chiffres

    Posté par  (site web personnel, Mastodon) . Évalué à 1.

    commentaire :)
    • [^] # Re: Pour renommer des fichiers avec des chiffres

      Posté par  . Évalué à 1.

      ou plus simple: mmv '[0-9].txt' 'pouet#1.txt'
      • [^] # Re: Pour renommer des fichiers avec des chiffres

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

        hum c t pas ca la question ! tu es hors sujet
      • [^] # Re: Pour renommer des fichiers avec des chiffres

        Posté par  . Évalué à 1.

        mmv ?
        Ca demande d'installer un logiciel en plus.


        Sinon, moi j'aurais plutot fait

        NUM=0
        for file in *.jpg; do
        NUM=`expr 1 + $NUM`
        mv "$file" $NUM.jpg
        done


        Ca me parait etre ce qu'il y a de plus simple...
        • [^] # optimisation

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

          let NUM="$NMU + 1"
          ou encore
          NUM=$(($NMU + 1))

          ce qui a le mérite de ne pas lancer /bin/expr (commande externe) à chaque itération :)
        • [^] #

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

          let NUM="$NUM + 1"
          ou encore
          NUM=$(($NUM + 1))

          ce qui a le mérite de ne pas lancer /bin/expr (commande externe) à chaque itération :)
          • [^] # p*** d'Opera

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

            qui me fait des 404 en postant :)
          • [^] # Re: Pour renommer des fichiers avec des chiffres

            Posté par  . Évalué à 1.

            Comme la solution de base portait sur awk, avec awk il vaut mieux faire

            ls -A | awk '{system("echo "$1 " " NR ".jpg")}'

            NR est une variable interne qui retourne la ligne courante, on economise le bloc BEGIN et l'incrémentation.
            • [^] # Re: Pour renommer des fichiers avec des chiffres

              Posté par  . Évalué à 1.

              Oui, mais là, avec echo ça renomme pas les fichiers ! ;)
              Par contre :

              ls -A | awk '{system("mv "$1 " "$1 NR ".jpg")}'

              va permettre d'ajouter aux noms de fichiers l'extension <numéro>.jpg
              et :

              ls -A | awk '{system("mv "$1 " " NR ".jpg")}'

              va permettre de renommer les fichiers en : <numéro>.jpg

              sinon, c'est vrai que c'est un peu plus optimisé. De cette manière, pas besoin de créer une variable et de l'incrémenter, c'est bien vu !
        • [^] # Re: Pour renommer des fichiers avec des chiffres

          Posté par  . Évalué à 1.

          a ce sujet, j'ai besoin de faire quelque chose comme:

          for repertoire in `find ./ -maxdepth 1 -type d`
          do echo $repertoire
          done

          mais ca ne marche pas des qu'un repertoire a un espace dans son nom.
          quelqu'un a une idee ?
          • [^] # Re: Pour renommer des fichiers avec des chiffres

            Posté par  . Évalué à 1.

            Tu peux essayer

            find ./ -maxdepth 1 -type d | while read repertoire; do
            echo $repertoire
            done


            Le while read est également très pratique pour lire des fichiers ligne à ligne contenant des blancs.
            • [^] # Re: Pour renommer des fichiers avec des chiffres

              Posté par  . Évalué à 1.

              le "while read" est surtout moins source de bugs:

              quand on fait `find ...` , le shell va remplacer l'expression `find ...` par son resultat sur la ligne de commande, mais voila la ligne de commande c'est un buffer de taille maxi fixe, et en cas d'overflow le shell va simplement limiter la reponse a la taille de son buffer, silencieusement.
              du coup t'es pas sur que les derniers fichiers soient traités !!!

              les construction en
              for i in ` ......`
              voire meme
              for i in *.txt
              sont a banir des qu'on ne peut pas presumer de la taille de *.txt en caracteres. (si un pignouf a cree des fichier avec des noms de 200 caracteres ca peut aller vite ... si un pignouf a cree 5000 fichiers dans le repertoire, meme probleme.
              • [^] # Re: Pour renommer des fichiers avec des chiffres

                Posté par  . Évalué à 1.

                Sauf que les gars qui ecrivent des shell, eux, ne sont pas des pignoufs, et que même avec 100000 « items » de 200 caractères chacun, zsh, bash et même ash s'en sortent très bien :

                for i in `perl -e '$a="."x200; map {print "$a$_ "} (1..100000)'`; do echo $i; done

                D'ailleurs c'est marrant mais zsh met 3"32 qand bash met 8.7 secondes et ash 4.2 secondes seulement... Vais peut-être bien mettre ash en /bin/sh moa.
          • [^] # Re: Pour renommer des fichiers avec des chiffres

            Posté par  . Évalué à 1.

            Avec l'option -exec ca marche:

            find / -type d -exec echo '{}' ';'

            {} correspond au nom du fichier/repertoire trouve
            le ; (l'espace devant est obligatoire) conclut ta commande
            les apostrophes permettent d'echapper pour pas que le shell les interprete. les \ marchent aussi mais je trouve ca moins lisible:

            find / -type d -exec echo \{\} \;
  • # Re: Pour renommer des fichiers avec des chiffres

    Posté par  . Évalué à 1.

    merci pour l'astuce bien bien pratique. Je vais maintenant tenter de trouver une réponse à la hauteur de ma nullité, soit: afficher les images dans l'ordre croissant (pas 10 11 12 etc... 1 20 21 ...

    :-)
    • [^] # Re: Pour renommer des fichiers avec des chiffres

      Posté par  . Évalué à 1.

      > Je vais maintenant tenter de trouver une réponse à la hauteur de ma nullité, soit: afficher les images dans l'ordre croissant (pas 10 11 12 etc... 1 20 21 ...

      Essaie :
      $ ls -v

      (-v comme affichage en mode version ; à ne pas confondre avec --version qui donne la version de ls :)

      Chez moi ça marche (bien que ça ne soit pas indiqué dans le man ; ls (GNU fileutils) 4.0.36) !
    • [^] # Re: Pour renommer des fichiers avec des chiffres

      Posté par  . Évalué à 1.

      Pourquoi ne pas tenter un truc du genre :
      ls -A | awk '{num=printf("%4.4d",NR);system("echo "$1 " " num ".jpg")}'

      Ainsi les fichiers s'appelleraient '0001.jpg', '0002.jpg' ...

      OK, ça limite à environ 10000 photos, mais c'est juste pour le principe ...
  • # Re: Pour renommer des fichiers avec des chiffres

    Posté par  . Évalué à 1.

    Il faut faire très attention à une chose avec cette commande.
    Vérifiez avant de la lancer que vous n'allez pas renommer un fichier vers un fichier qui existe déjà.
  • # Re: Pour renommer des fichiers avec des chiffres

    Posté par  . Évalué à 1.

    Cette ligne de commande pose des problèmes avec les noms e fichiers contenant des espaces, j'ai donc du faire un script.

    Le voici :

    #!/bin/bash

    #on récupère l'extention des fichiers à renomer, mp3 par defaut
    ext="mp3"
    if [ ! -z $1 ] ; then
    ext=$1
    fi

    NUM=0
    # on liste les fichiers par ordre alphabétique en intérprétant
    # "intéligemment" les chiffres
    for file in `ls -Av *.$ext`
    do
    let NUM="$NUM + 1"
    # si le chiffre est inférieur à 10, on rajoute le 0
    if [ ${NUM} -lt 10 ]; then
    I="0""$NUM"
    else
    I="$NUM"
    fi
    # on renome
    mv "$file" $I.$ext
    done
  • # Re: Pour renommer des fichiers avec des chiffres

    Posté par  . Évalué à 1.

    Oui toutes ces modifs sont sympatoches....
    Seulement voila...si on utilise du PNG ou si on attend 2004 pour mettre des GIF dans le répertoire, ça risque de donner des choses joyeuses du genre un PNG avec une extension JPG…
  • # Avec Perl

    Posté par  . Évalué à 1.

    L'équivalent de la solution proposée :
    cd ton_répertoire
    \ls -A | perl -e '$n = 0; while (<>) { chomp; rename $_, ++$n.".jpg"; }'

    Sans renommer les fichiers commençant par un point ni les répertoires, et en conservant les suffixes pour les fichiers qui en ont :
    cd ton_répertoire
    perl -e '$n = 0; while (<*>) { -f $_ and rename $_, ++$n.(/^.*(\.[^.]{1,4})$/ ? $1 : ".jpg"); }'

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

    • [^] # Re: Avec Perl

      Posté par  . Évalué à 1.

      Plus concis, en utilisant notamment les options de ligne de commande de Perl :
      cd ton_repertoire; \ls -A | perl -nle 'rename $_, ++$n.".jpg"'

      En faisant attention à ne pas renommer les répertoires, les fichiers commençant par un point et les fichiers comportant déjà une extension autre que .jpg ou .jpeg :
      cd ton_repertoire; \ls -A | perl -nle '-f and (! /^\.|\.[^.]{1,4}$/ || /^[^\.].*\.jpe?g$/i) and rename $_, ++$n.".jpg"'

      « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

      • [^] # Re: Avec Perl

        Posté par  . Évalué à 1.

        J'ai écrit :
        cd ton_repertoire; \ls -A | perl -nle '-f and (! /^\.|\.[^.]{1,4}$/ || /^[^\.].*\.jpe?g$/i) and rename $_, ++$n.".jpg"'

        Dans le fond, plutôt ça :
        cd ton_repertoire; \ls -A | perl -nle '-f and ! /\.[^.]{1,4}$/ || /\.jpe?g$/ and /^([^.].*)(\.(jpe?g)?)?$/i and rename $1, ++$n.".jpg"'

        « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • # Re: Pour renommer des fichiers avec des chiffres

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

    moi je conseillerai d'utiliser digicamerge, disponible sous GPL depuis :

    http://www.librelogiciel.com/software/DigicaMerge/action_Presentati(...)

    qui offre de très nombreuses options particulièrement puissantes pour ce genre de traitement...

Suivre le flux des commentaires

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