Forum Linux.débutant script pour renommer

Posté par  .
Étiquettes : aucune
0
19
août
2005
hello

jeune newbie, je souhaite ecrire un script qui traite / renomme les fichiers de toute une arborescence.
Pas évident de comprendre tous les scripts et commandes que j'ai trouvé dans la recherche...

mon souhait:
- mettre l'extension - le suffixe ;-) - des fichiers en minuscule
- remplacer les espaces par des _

j'en suis à :
#!/bin/bash
find . -name *

et apres... je sais qu'il s'agit d'un 'mv' quelque chose

y a-t-il une bonne ame pour m'expliquer ?
-> récupérer la liste des fichier : c'est le 'find' qui le fait, OK
-> comment utiliser cette liste
-> comment selectionner / convertir le suffixe en minuscule ( lowercase ? )
-> comment remplacer les espaces par _ ( ereg ? )

merci de vos réponses...
  • # Plus simple avec rename

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

    Non testé mais pour te mettre sur la voie :
    $ rename 's/JPG/jpg/' `find .`
    $ rename 's/\ /\_/' `find .`
    • [^] # Re: Plus simple avec rename

      Posté par  . Évalué à 1.

      normallement, si la regexp s'utilise comme avec sed, on peut faire ça en un coup:
      rename 's/JPG/jpg/;s/\ /_/' `find .`

      Question optimisation ;)
  • # Un debut

    Posté par  . Évalué à 1.

    -> comment utiliser cette liste
    Je connais deux possibilités :
    *Avec find tu peux executer une commande pour chaque fichier trouvé avec une commande du genre : find -name "*" -exec macommande {} \;
    {} correspond au parametre trouvé par find

    *Si tu veux utiliser la liste complete d'un coup, l' utilisation des backquotes est pas mal : (ce qui est entre backquote est interprete comme une commande)
    macommande `find - name "*"`



    -> comment selectionner / convertir le suffixe en minuscule ( lowercase ? )
    Un petit exemple pour etre sur de comprendre la question serait bienvenue


    -> comment remplacer les espaces par _ ( ereg ? )
    rename s/ /_/ mes fichiers


    J ai pas testé mais en gros on pourrait avoir un truc du genre :
    rename s/ /_ `find -name "*"`
  • # un truc comme ca ?

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

    find . | while read f
    do 
      f2=$(echo "$f" | tr ' ' _)
      ext=""
      eval $(echo "$f" | sed -n 's/^\(.*\)\(\.[^/.]*\)$/f2="\1"; ext="\2"/p')
      f2=$f2$(echo "$ext" | tr '[:upper:]' '[:lower:]')
      if [ "$f" != "$f2" ]
      then
        mv -f "$f" "$f2"
      fi
    done
    Je te conseille d'ajouter echo avant mv un coup pour essayer :)

Suivre le flux des commentaires

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