Forum Linux.général Renommage en masse selon métadonnées.

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
29
juil.
2019

Bonjour,

J'aimerais renommer mes vidéos selon les métadonnées de date (ça fait un peu suite à mes dernières demandes).
Du coup, j'ai "écrit" (…recopié des bouts…) ce script :

#!/bin/bash
for src in src/*.mp4 ; do
    heure=$(exiftool -DateTimeOriginal ${src} |sed -e 's/^.*: //')
    cp ${src} dst/"${heure}.mp4"
done

Pour des fichiers dans un dossier src (source) destinés à un dossier dst (destination).

Ça fonctionne, mais je n'ai pas réussi à faire trois choses :

1) Le faire pour tous les fichiers mp4 et MP4 (j'aurais pu garder l'astérisque seulement, j'imagine, mais j'ai parfois d'autres fichiers).
2) Ajouter le nom, du type 2019:01:01 12:00:00_DSC09001.mp4" (le DSC09001.mp4)
3) Être un peu plus "verbeux" si possible.

Pourriez-vous me donner des pistes, s'il vous plaît ? :)

  • # find est ton ami

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

    Tu utilises :

    #!/bin/bash
    for src in src/*.mp4 ; do
    heure=$(exiftool -DateTimeOriginal ${src} |sed -e 's/^.*: //')
    cp ${src} dst/"${heure}.mp4"
    done
    

    En fonction du shell, tu peux probablement feinter pour ignorer la casse, mais ceci est portable : find src -type f -iname '*.mp4' (tu peux jouer avec -name versus -iname et/ou regarder la documentation).

    Pour ajouter le nom, tu as la variable $src qui peut servir. Tu peux extraire le nom du fichier avec basename (cf. aussi dirname).

    Pour la verbosité, cp, mv, etc. ont une option -v. Sinon tu peux faire du echo ou printf toi-même.

    Bonnes évolutions.

    Debian Consultant @ DEBAMAX

    • [^] # Re: find est ton ami

      Posté par  . Évalué à 1.

      L'option -v…quel imbécile je fais parfois. :D

      Merci pour les pistes (dont basename, en fait, dont j'ai déjà emprunté l'usage à l'aveugle, finalement…).

      Je devrais m'en sortir ! :)

  • # $(ls *.mp4 *.MP4)

    Posté par  . Évalué à 3. Dernière modification le 29 juillet 2019 à 14:55.

    Salut,

    for f in $(ls *.mp4 *.MP4); do echo "Commande $f"; done
    

    Commande test1.mp4
    Commande test2.MP4

    donc je pense que devrait fonctionner avec ça:

    for src in $(ls src/*.mp4 src/*.MP4) ; do
        heure=$(exiftool -DateTimeOriginal ${src} |sed -e 's/.: //')
        cp ${src} dst/"${heure}.mp4"
    done
    • [^] # Re: $(ls *.mp4 *.MP4)

      Posté par  . Évalué à 1.

      Je vais également tester cette façon de lister les fichiers qui m'intéressent (ça peut servir pour d'autres formats, du coup).

      Merci bien ! :)

    • [^] # Plus simple

      Posté par  . Évalué à 3.

      Bonjour,

      Pourquoi faire si compliqué ?
      for in accepte plusieurs arguments (d’ailleurs même si l’on ne met qu’un seul nom avec un joker, il est développé avant d’être passé à cette instruction.

      Donc

      for f in src/*.mp4 src/*.MP4; do

      fera l’affaire.

      Sinon, j’aurais utilisé cp -p voire cp -a pour préserver les dates et les attributs des fichiers.

      Quoique s’il s’agit réellement de renommer comme dit dans la question, c’est mv qu’il faut (mais l’utilisation de cp est peut-être pour s’assurer que le résultat convienne avant de supprimer les fichiers originaux).

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

      • [^] # Re: Plus simple

        Posté par  . Évalué à 1.

        Merci ! :)

        Je travaille toujours sur des sauvegardes et l'utilisation de cp plutôt que de mv, c'est simplement pour éviter une copie de plus. :D

  • # Encore plus simple…

    Posté par  . Évalué à 2.

    Salut,

    for f in src/*.[mM][pP]4; do

    ;-))

    PS. À noter que "ls" est à proscrire dans un script ;-(

    • [^] # Re: Encore plus simple…

      Posté par  . Évalué à 1.

      Salut,

      Pourquoi ls est déconseillé ? :)

      • [^] # Re: Encore plus simple…

        Posté par  . Évalué à 1.

        Pour éviter des mésaventures si par malheur certains noms de fichiers venaient à contenir des espaces.
        Mieux vaut privilégier le mécanisme interne du shell concernant le développement des noms.

  • # Commentaire supprimé

    Posté par  . Évalué à 3.

    Ce commentaire a été supprimé par l’équipe de modération.

Suivre le flux des commentaires

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