Forum Linux.débutant renommage de fichiers en masse

Posté par  . Licence CC By‑SA.
Étiquettes :
0
20
juin
2015

Bonjour , j ' ai recuperer une foule de fichiers donc les noms sont tres laids et que je voudrais renommer selon certains criteres et supprimer des caracteres speciaux dans les noms .

exemple : [nom.de.fichier]blablobli.jpg

je voudrais donc qu il soit transformé par : blablobli.jpg ( jusque la en faisant des recherches internet j' ai trouvé un script qui fait le boulot , mais il ne descend pas dans les sous-repertoires .

donc comment faire pour avoir un script ( ou autre ) qui remplace une expression du type [test] par " rien " et qu il opère aussi dans les sous répertoires .

aidez moi svp , j 'ai 3000 photos a renommer …

  • # find + exec

    Posté par  . Évalué à 4.

    Si tu veux exécuter une commande sur toute une arborescence tu utilises find . -exec

    • [^] # Re: find + exec

      Posté par  . Évalué à 1.

      c ' est ce que j ' ai fais pour le depart de mon script , mais je me retouve confronter au probleme lié a la recursivité .

      Dans le retour de la commande find je recupere le chemin complet relatif au pwd du coup dans la commande exec il faut que je recupere uniquement le nom du fichier , mais je n' ai pas trouver comment faire .

      • [^] # Re: find + exec

        Posté par  . Évalué à 4.

        il faut que je recupere uniquement le nom du fichier

        man basename

        • [^] # Re: find + exec

          Posté par  . Évalué à 1.

          super merci !!!

          • [^] # Re: find + exec

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

            Tu peux aussi faire find … | sed -e 's@.*/@@' qui sera bien plus rapide puisque la version avec basename lancera un programme par fichier trouvé, alors qu'avec le pipe tu as en tout et pour tout deux programmes quoi qu'il arrive!

  • # 3 pistes

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

    • Soit tu fais un script shell (cherche des exemples du côté de grep, cut, sed, awk…) ou un petit programme Python ou n'importe quel autre langage que tu maîtrises.
    • Des fois j'exporte la liste des fichiers (ls > toto.txt) et je la colle dans LibreOffice Calc, une colonne avec le nom de départ, une 2e je génère le nom souhaité avec les fonctions de texte, la 3e une concaténation "mv nom1 nom2", et quand c'est bon j'exporte cette 3e colonne en texte et je l'exécute
    • Si tu es sous KDE, il y a l'excellent KRename, qui a sûrement des équivalents dans les autres bureaux.

    Et tout ça d'abord sur une copie (au moins partielle) pour tester que tout fonctionne comme prévu !

  • # Utilise `rename`

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

    Il me semble que rename est installé par défaut, et il te laisse faire du remplacement.

    Exemple :

    $ rename '[nom.de.fichier]' '' *.jpg

    Cette commande va remplacer la première occurrence de [nom.de.fichier] par une chaine de caractères vide dans tous les fichiers jpg du répertoire courant.

    Si tu utilises zsh, alors tu peux simplement lancer cette commande de manière récursive :

    $ rename '[nom.de.fichier]' '' **/*.jpg

    Si tu veux plus compliqué, je ne te conseille pas d'utiliser awk/sed/etc., car tu vas forcément oublié des cas particuliers. Dans ce cas, je ne peux que te recommander krename, comme recommandé précédemment.

Suivre le flux des commentaires

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