En Linux, cómo hacer un archivo con un nombre que sea la fecha y hora actuales

12

Quiero hacer un archivo cuyo nombre será una fecha y hora actual. Puedo crear un archivo con el touchcomando. También puedo obtener la hora actual con el datecomando. Entonces, creo que necesito de alguna manera canalizar el segundo comando al primero. ¿Cómo puedo hacer eso?

Der Hochstapler
fuente

Respuestas:

19

Use el valor de retorno de una expresión de shell como argumento para touch:

touch $( date '+%Y-%m-%d_%H-%M-%S' )

Resultado: un archivo llamado eg 2012-03-11_14-33-53.

Esta respuesta supone que está utilizando bash(se describe en la mansección de la página Sustitución de comandos ), pero otros shells funcionarán igual o solo un poco diferente.

Daniel Beck
fuente
@MdGao Y se describe en la misma sección de la página del manual. Sin embargo, prefiero la respuesta que he dado, aquí hay algunas razones
Daniel Beck
Eliminé mi comentario porque Markdown rompió los backticks. gracias por el enlace @DanielBeck
Mengdi Gao
2
@gasan Simplemente rodee con "comillas. Se puede imaginar la salida de datela sustitución de la parte de la línea de comandos, y touch Sun Mar 11 14:48:31 CET 2012crearía nombre de archivos Sun, Maretc. touch "Sun Mar 11 14:48:31 CET 2012", por otro lado bien funciona (excepto que no estoy seguro de lo bien que los dos puntos funcionarán).
Daniel Beck
2
@gasan Las comillas simples no funcionarán porque no permiten la sustitución de comandos ni ninguna otra interpretación. Consulte las citas en el manual de Bash.
slhck
2
@gasan La diferencia es que el contenido de las comillas simples no se evalúa. Pruébalo con echo "$HOME"y echo '$HOME'. Por eso sugerí el uso de ".
Daniel Beck
0

Puedes usar un comando más simple

touch $(date | tr ' ' '-')
Omar Mardini
fuente
Algo menos elegante y posiblemente menos portátil, pero sí, eso también funcionará.
Scott
Bien, como sé que estás leyendo esto, entraré en un poco más de detalle: la respuesta de Daniel da un resultado en un formato conocido y totalmente controlado. (1) La salida de datemuestra típicamente el tiempo como hh: mm: ss. Su respuesta da como resultado nombres de archivo que contienen dos puntos. Esto podría causar un error en los sistemas de archivos basados ​​en Windows. (2) El resultado bruto de una simple invocación de datedepende de la configuración regional; es decir, personalizado al idioma local. Probar LANG=de_DE datey LANG=fr_FR datever ejemplos. … (Continúa)
Scott
(Cont.) ... (2a) Por lo tanto, en el caso (¿improbable?) De que alguna vez cambie el idioma de su sistema, o le dé su script y una colección de archivos de datos de su sistema a alguien cuyo sistema esté configurado para un idioma diferente, habrá una falta de coincidencia. (No estoy seguro de que esto sea un problema real, pero sería un problema estético). (2b) No conozco ningún lugar que haga esto, pero en teoría podría haber un lugar donde dateescriba la fecha como mm / dd / aa (o dd / mm / aa). … (Continúa)
Scott
(Cont.) ... Si alguna vez se encuentra con un sistema de este tipo, tendría nombres de archivo que contienen barras inclinadas, y eso provocará errores. (3) La respuesta de Daniel da un resultado donde el orden lexicográfico (es decir, alfabético), según lo producido por lso *, corresponde al orden cronológico. Con su respuesta, todos los Friarchivos estarán al comienzo de cualquier lista ordenada lexicográficamente Apry Augaparecerán antes de todos los demás meses.
Scott