web-dev-qa-db-fra.com

Comment mettre la date et l'heure dans un nom de fichier?

J'essaie d'exécuter une commande et je voudrais mettre la date et l'heure dans le nom du fichier de sortie.

Voici un exemple de commande que j'aimerais exécuter.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

Le format de la date et de l'heure peut être quelque chose de sensé avec des soulignements. Même UTC si l'AM et PM ne peuvent pas être utilisés.

24
visc

Si vous souhaitez utiliser la date/heure actuelle comme nom de fichier, vous pouvez utiliser date et substitution de commande .

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

Il en résulte le fichier 2016_04_25_10_30_AM.log (bien que, avec l'heure actuelle) soit créé avec le hachage md5 de /etc/mtab comme son contenu.

Veuillez noter que les noms de fichiers contenant des horodatages au format 12 heures ne seront probablement pas triés par nom comme vous le souhaitez. Vous pouvez éviter ce problème en utilisant des horodatages au format 24 heures à la place.

Si vous n'êtes pas obligé d'utiliser ce format de date spécifique, vous pouvez envisager d'utiliser un format datetime compatible ISO 8601. Voici quelques exemples de génération de représentations datetime ISO 8601 valides:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

Si vous voulez des noms de fichiers "plus sûrs" (par exemple, pour la compatibilité avec Windows), vous pouvez omettre les deux-points de la portion de temps.

Veuillez garder à l'esprit que les exemples ci-dessus supposent tous l'heure du système local. Si vous avez besoin d'une représentation horaire cohérente entre les fuseaux horaires, vous devez spécifier un décalage de fuseau horaire ou UTC. Vous pouvez obtenir un décalage de fuseau horaire conforme à la norme ISO 8601 en utilisant "% z" dans la partie format de votre appel date comme ceci:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

Vous pouvez obtenir l'heure UTC dans votre appel date en spécifiant le -u flag et en ajoutant "Z" à la fin de la chaîne datetime pour indiquer que l'heure est UTC comme ceci:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z
50
Ryan