Estoy tratando de agregar la fecha actual al final de un nombre de archivo como este:
TheFile.log.2012-02-11
Esto es lo que tengo hasta ahora:
set today = 'date +%Y'
mkdir -p The_Logs &
find . -name The_Logs -atime -1 -type d -exec mv \{} "The_Logs_+$today" \; &
Sin embargo, todo lo que obtengo es el nombre del archivo, y no agrega nada. ¿Cómo agrego una fecha actual a un nombre de archivo?
:
ya que se leerá como host en rsync y scp. stackoverflow.com/a/37143274/390066Respuestas:
Más que probable es su uso de
set
. Eso asignará 'today', '=' y la salida deldate
programa a parámetros posicionales (también conocidos como argumentos de línea de comandos). Solo desea usar el shell C (que está etiquetando como "bash", por lo que probablemente no), querrá usar:Observe la falta de espacios alrededor del signo igual.
Tampoco desea utilizarlo
&
al final de sus declaraciones; lo que hace que el shell no espere a que termine el comando. Especialmente cuando uno se basa en el siguiente. Elfind
comando podría fallar porque se inicia antes demkdir
.fuente
Bash script para inyectar una fecha en un nombre de archivo:
Este código bash en el archivo llamado
a.sh
Cuando se ejecuta, imprime:
Explicación del código:
Interprete el guión con el intérprete / bin / bash. Haga una nueva variable llamada hoy. Ejecute el comando de fecha, pasando los indicadores Y, m, d, H, M, S para configurar la salida. Coloque el resultado en la variable de fecha.
Cree una nueva variable llamada nombre de archivo, rodee la variable $ today con el resto del texto del nombre de archivo estático. luego haga eco del nombre del archivo a la pantalla.
Mételo en una sola línea para aumentar lulz:
fuente
Parece que has mezclado varias cosas.
set today = 'date +%Y'
se parece a la sintaxis de tcsh, pero incluso en tcsh asigna la cadenadate +%Y
a la variabletoday
, no ejecuta eldate
comando. Como probablemente esté usando bash o algún otro shell POSIX, la sintaxis de una asignación estoday=some_value
(sin espacios alrededor del signo igual). Para ejecutar el comando y asignar su salida a la variable, use la sustitución del comando :(También he completado la especificación de la fecha). Puede usar comillas inversas en lugar de paréntesis en dólares, pero es propenso a confundirse visualmente con comillas hacia adelante, y las reglas para cuando necesita comillas dentro de un comando con comillas inversas son bastante complejas y dependen de la implementación, por lo que es mejor no atenerse a
$(…)
(lo que tiene el mismo efecto con una sintaxis más sana).Usaste
&
al final de varios comandos. Eso hace que el comando se ejecute en segundo plano, lo que no se desea aquí. Sospecho que querías decir&&
, lo que significa ejecutar el siguiente comando solo si el primer comando tuvo éxito.Una alternativa al uso
&&
después de cada comando es comenzar su script conset -e
. Esto le dice al shell que deje de ejecutar el script tan pronto como cualquier comando devuelva un estado distinto de cero (excepto los comandos enif
condiciones y algunos otros casos).Su
find
comando está bien, pero probablemente no haga lo que pretende hacer (aunque no estoy seguro de qué es eso).Estás creando un directorio con
mkdir
y luego lo atraviesas inmediatamentefind
. Eso no será útil a menos que el directorio ya exista. ¿Quería crear un directorio para los registros de hoy y mover archivos recientes deThe_Logs
un directorio llamado, por ejemploThe_Logs.2012-02-11
?¿O quiso cambiar el nombre de los archivos de registro de hoy para agregar el sufijo
$today
? Eso requiere calcular el nombre de archivo diferente para cada archivo a mover.Tenga en cuenta que solía
-mtime
mover archivos en función de su tiempo de modificación, y no-atime
, que es el momento en que el archivo se leyó por última vez (si su sistema realiza un seguimiento de eso, si no lo hace, el momento puede estar tan atrás como el mtime).fuente
Puede cambiar el nombre del archivo con la marca de tiempo añadida
fuente
Esta:
Deberia trabajar. Aunque parece que está utilizando csh y mi solución para eliminar el signo + puede no funcionar para usted, pero no le hará daño intentarlo. Encerrar su variable entre {} llaves, siempre es una buena idea para evitar expansiones inesperadas de variables.
fuente