Nuestro equipo redactor ha pasado mucho tiempo investigando la respuesta a tus interrogantes, te dejamos la respuesta por eso nuestro deseo es resultarte de mucha ayuda.
Solución:
Lo más probable es que sea su uso de set
. Eso asignará ‘hoy’, ‘=’ y la salida del date
programa a parámetros posicionales (también conocidos como argumentos de línea de comandos). Solo desea usar C shell (que está etiquetando esto como “bash”, por lo que probablemente no), querrá usar:
today=`date +%Y-%m-%d.%H:%M:%S` # or whatever pattern you desire
Observe la falta de espacios alrededor del signo igual.
Tampoco quieres usar &
al final de sus declaraciones; lo que hace que el shell no espere a que finalice el comando. Especialmente cuando uno confía en el siguiente. los find
El comando podría fallar porque se inicia antes que el mkdir
.
Bash script para inyectar una fecha en un nombre de archivo:
Este código bash en el archivo llamado a.sh
#!/bin/bash
today=`date '+%Y_%m_%d__%H_%M_%S'`;
filename="/home/el/myfile/$today.ponies"
echo $filename;
Cuando se ejecuta, imprime:
[email protected] ~ $ chmod +x a.sh
[email protected] ~ $ ./a.sh
/home/el/myfile/2014_08_11__15_55_25.ponies
Explicación del código:
Interprete el script con el intérprete /bin/bash. Haz 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 de la static texto del nombre del archivo. luego repite el nombre del archivo en la pantalla.
Mételo en una sola línea para aumentar lulz:
echo "/home/el/myfile/`date '+%Y_%m_%d__%H_%M_%S'`.ponies"
pareces tener mixed subir varias cosas.
set today = 'date +%Y'
se parece a la sintaxis de tcsh, pero incluso en tcsh asigna el string date +%Y
a la variable today
no ejecuta el date
mando. Como probablemente esté usando bash o algún otro shell POSIX, la sintaxis de una asignación es today=some_value
(sin espacios alrededor del signo igual). Para ejecutar el comando y asignar su salida a la variable, utilice la sustitución de comandos:
today=$(date +%Y-%m-%d)
(También he completado la especificación de la fecha). Puede usar comillas inversas en lugar de paréntesis de dólar, pero es probable que se confundan 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 apegarse a $(…)
(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 quisiste decir &&
lo que significa ejecutar el siguiente comando solo si el primer comando tuvo éxito.
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
Una alternativa al uso &&
después de cada comando es iniciar su secuencia de comandos con set -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 en if
condiciones y algunos otros casos).
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
Tu find
El 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 inmediatamente atravesándolo con find
. Eso no será útil a menos que el directorio ya exista. ¿Quería crear un directorio para los registros de hoy y mover los archivos recientes de The_Logs
a un directorio llamado por ejemplo The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv "The_Logs.$today" ;
¿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.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' ;
Tenga en cuenta que usé -mtime
para mover archivos en función de su hora de modificación, y no -atime
que es la hora en que se leyó el archivo por última vez (si su sistema realiza un seguimiento de eso; si no lo hace, el atime puede ser tan antiguo como el mtime).
Recuerda que puedes permitirte glosar si te ayudó.