2 votes

Renommer et convertir les dates dans le nom de fichier sans extension de fichier

Mes fichiers sont nommés selon le fuseau horaire GMT. J'ai réussi à renommer et convertir tous les fichiers dans le fuseau horaire requis en suivant les étapes suivantes.

1. Ce code supprime toutes les extensions de fichiers qui sont en .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

  • Exemple de conversion : ‘15Z29Aug2017’ -> ‘201708292030’

Malheureusement, je dois ajouter à nouveau l'extension .gif à tous les fichiers en utilisant for f in *; do mv "$f" "$f.gif"; done

Comment puis-je précisément éviter la suppression de l'extension de fichier en modifiant mon code à l'étape 2 ?

Étape 2 extraite de : Comment puis-je convertir en masse des noms de dossier d'un format de date à un autre

4voto

dessert Points 36815

Tout ce dont vous avez besoin est de supprimer .gif de $f et de le remettre en place :

pour f dans *; faire mv -v -- "$f" "$(date -d "${f%%.gif}" '+%Y%m%d%H%M')".gif; fait

${f%%.gif} prend la variable f et supprime la dernière occurrence (donc # deux fois) de .gif en elle, donc même un nom de fichier étrange comme 1.gif2.gif ne perdrait que son dernier .gif. Cette fonctionnalité incroyable s'appelle Expansion des paramètres Bash et lorsque vous la recherchez sous ce nom, vous pouvez en apprendre davantage sur sa puissance éblouissante, par exemple sur ce FAQ Bash - elle est capable de tellement plus!

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X