Saltar al contenido

Agregar una fecha actual de una variable a un nombre de archivo

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 todayno 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é -mtimepara mover archivos en función de su hora de modificación, y no -atimeque 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ó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *