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 Cyril Brulebois (site Web personnel) . Évalué à 3.
Tu utilises :
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 avecbasename
(cf. aussidirname
).Pour la verbosité,
cp
,mv
, etc. ont une option-v
. Sinon tu peux faire duecho
ouprintf
toi-même.Bonnes évolutions.
Debian Consultant @ DEBAMAX
[^] # Re: find est ton ami
Posté par Stinouff . É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 seb . Évalué à 3. Dernière modification le 29/07/19 à 14:55.
Salut,
Commande test1.mp4
Commande test2.MP4
donc je pense que devrait fonctionner avec ça:
[^] # Re: $(ls *.mp4 *.MP4)
Posté par Stinouff . É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 Arthur Accroc . É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
fera l’affaire.
Sinon, j’aurais utilisé
cp -p
voirecp -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).Guerres, déréglement climatique, effondrement de la biodiversité, épuisement des ressources, pandémie, montée du fascisme, de l’intégrisme et du complotisme… On vit une époque formidable…
[^] # Re: Plus simple
Posté par Stinouff . É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 zipe31 . Évalué à 2.
Salut,
;-))
PS. À noter que "ls" est à proscrire dans un script ;-(
[^] # Re: Encore plus simple…
Posté par Stinouff . Évalué à 1.
Salut,
Pourquoi ls est déconseillé ? :)
[^] # Re: Encore plus simple…
Posté par zipe31 . É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.
[^] # Re: Encore plus simple…
Posté par Stinouff . Évalué à 1.
Ok merci ! :)
# -eu
Posté par Étienne BERSAC (site Web personnel) . Évalué à 3.
ProTip : Utilise
#!/bin/bash -eu
pour qu ton script s'arrête à la première erreur plutôt que de continuer à faire des conneries :DSuivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.