Mon ensemble de fichiers est nommé en fonction du fuseau horaire GMT. J'ai renommé et converti tous les fichiers avec succès dans le fuseau horaire requis en suivant les étapes suivantes.
1. Ce code supprime toutes les extensions de fichier qui sont .gif rename "s/.gif//g" *
2. Ce code convertit et renomme tous les fichiers for f in *; do mv -v -- "$f" "$(date -d "$f" '+%Y%m%d%H%M')"; done
‘15Z29Aug2017’ -> ‘201708292030’
Malheureusement, je dois à nouveau définir l'extension .gif pour tous les fichiers à l'aide de for f in *; do mv "$f" "$f.gif"; done
Comment puis-je ignorer la suppression de l'extension de fichier en modifiant mon code à l'étape 2?
Étape 2 tirée de: Comment puis-je convertir par lots les noms de dossier d'un format de date à un autre
Tout ce dont vous avez besoin est de retirer .gif
de $f
et le remettre sur:
for f in *; do mv -v -- "$f" "$(date -d "${f%%.gif}" '+%Y%m%d%H%M')".gif; done
${f%%.gif}
prend la variable f
et supprime la dernière (d'où #
deux fois) occurrence de .gif
dedans, donc même un nom de fichier étrange comme 1.gif2.gif
n'obtiendrait que son dernier .gif
supprimé. Cette fonctionnalité étonnante est appelée Extension des paramètres de Bash et lorsque vous la recherchez sous ce nom, vous pouvez tout lire sur son pouvoir éblouissant, e. g. sur cette FAQ Bash - il est capable de bien plus!