¿Cómo se pone la fecha y la hora en un nombre de archivo?

23

Estoy tratando de ejecutar un comando y me gustaría poner la fecha y la hora en el nombre del archivo de salida.

Aquí hay un comando de muestra que me gustaría ejecutar.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

El formato de fecha y hora puede ser razonable con guiones bajos. Incluso UTC si no se pueden usar AM y PM.

visc
fuente
Si no es Bash, ¿qué shell estás usando?
Ryan
Oh, es bash ... quise decir bash script *
visc
No estás canalizando, estás redirigiendo. Y la pregunta sería la misma si no estuvieras redireccionando. Actualizando el título.
Mikel

Respuestas:

46

Si desea utilizar la fecha y hora actual como un nombre de archivo, puede utilizar datey la sustitución de comandos .

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

Esto da como resultado que el archivo 2016_04_25_10_30_AM.log(aunque con la fecha y hora actual) se cree con el hash md5 /etc/mtabcomo contenido.

Tenga en cuenta que los nombres de archivo que contienen marcas de tiempo de formato de 12 horas probablemente no se ordenarán por nombre de la manera que usted desea. Puede evitar este problema utilizando marcas de tiempo de formato de 24 horas.

Si no tiene el requisito de usar ese formato de fecha específico, puede considerar usar un formato de fecha y hora compatible con ISO 8601. Algunos ejemplos de cómo generar representaciones válidas de fecha y hora ISO 8601 incluyen:

 $ 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 desea nombres de archivo "más seguros" (por ejemplo, para compatibilidad con Windows), puede omitir los dos puntos de la porción de tiempo.

Tenga en cuenta que todos los ejemplos anteriores suponen la hora del sistema local. Si necesita una representación horaria que sea coherente en todas las zonas horarias, debe especificar un desplazamiento de zona horaria o UTC. Puede obtener un desplazamiento de zona horaria compatible con ISO 8601 utilizando "% z" en la parte de formato de su datellamada de esta manera:

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

Puede obtener la hora UTC en su datellamada especificando el -uindicador y agregando "Z" al final de la cadena de fecha y hora para indicar que la hora es UTC de esta manera:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z
Ryan
fuente
@ Mikel ¿Tu y yo hicimos una edición cruzada?
Ryan
Posiblemente. Acabo de cambiar "subshell" a "sustitución de comando". Ya terminé, así que edita como quieras.
Mikel
@Mikel No hay problema. He vuelto a enviar mi edición ahora.
Ryan
@Mikel ¡No te preocupes! Debería haber recordado llamarlo "sustitución de comandos" de todos modos. Gracias por mejorar la respuesta!
Ryan
3
El subrayado es un personaje extraño. Se prefiere usar ISO-8601 como el $(date +%FT%T)que dará 2016-04-25T10:30:00.
hschou