2009-11-25 22 views
16

Quiero agregar la fecha junto a un nombre de archivo ("somefile.txt"). Por ejemplo: somefile_25-11-2009.txt o somefile_25Nov2009.txt o cualquier cosa en ese sentidoAñadir fecha al nombre de archivo en linux

Tal vez un script lo haga o algún comando en la ventana del terminal. Estoy usando Linux (Ubuntu).

Gracias de antemano.

oh casi me olvido de agregar que la secuencia de comandos o el comando debe actualizar el nombre de archivo a una nueva fecha cada vez que desee guardar el archivo en una carpeta específica, pero manteniendo los archivos anteriores. Por lo tanto, en la carpeta aparecerán eventualmente archivos como este: nombre_archivo18Oct2009.txt, nombre_de_archivo_9Nov2009.txt, nombre_de_archivo_23Nov2009.txt

+4

Es posible que desee aaaa dd-mm-en lugar de dd-mm-aaaa para conseguir especie lexicográfico de nombres de archivo también ordenarlos cronológicamente – laalto

Respuesta

20

Puede usar los puntos de apoyo.

$ echo "myfilename-"`date +"%d-%m-%Y"` 

Rendimiento:

myfilename-25-11-2009 
+0

Esto agrega la fecha al nombre del archivo: en el ejemplo de la pregunta, la fecha debe ir * entre * el nombre del archivo y la extensión. –

+5

Esto funcionó para mí: 'echo test>" data-csv - "\' date + "% Y-% m-% d" \ '" .txt "' –

+1

O bien: 'echo test>" data-csv- " \ 'date +"% Y-% m-% d.txt "\' ' –

10
cp somefile somefile_`date +%d%b%Y` 
31

Hay dos problemas aquí.

1. obtener la fecha como una cadena

Esto es bastante fácil. Simplemente use el comando date con la opción +. Podemos usar backticks para capturar el valor en una variable.

$ DATE=`date +%d-%m-%y` 

Puede cambiar el formato de fecha mediante el uso de diferentes % opciones que se detallan en el date man page.

2. Divida un archivo en nombre y extensión.

Esto es un poco más complicado. Si creemos que serán solo uno . en el nombre de archivo, podemos usar cut con . como delimitador.

$ NAME=`echo $FILE | cut -d. -f1 
$ EXT=`echo $FILE | cut -d. -f2` 

Sin embargo, esto no va a trabajar con múltiples . en el nombre del archivo. Si estamos usando bash - que probablemente es - podemos utilizar algunos bash magic that allows us to match patterns when we do variable expansion:

$ NAME=${FILE%.*} 
$ EXT=${FILE#*.} 

ponerlos juntos obtenemos:

$ FILE=somefile.txt    
$ NAME=${FILE%.*} 
$ EXT=${FILE#*.} 
$ DATE=`date +%d-%m-%y`   
$ NEWFILE=${NAME}_${DATE}.${EXT} 
$ echo $NEWFILE     
somefile_25-11-09.txt       

Y si estamos menos preocupados por la lectura que hacemos todos el trabajo en una línea (con un formato de fecha diferente):

$ FILE=somefile.txt 
$ FILE=${FILE%.*}_`date +%d%b%y`.${FILE#*.} 
$ echo $FILE         
somefile_25Nov09.txt 
+0

Gracias Dave pero ¿Cómo o dónde ejecuto este script? Perdóname soy nuevo con Linux. – sami

+0

¿Puede dar más detalles sobre lo que quiere hacer exactamente? Así que tiene un archivo en un directorio que desea fechar de esta manera. ¿Es solo un archivo con el mismo nombre cada vez o podría ser un número de archivos con un número de nombre diferente? –

+1

edité mi pregunta en la parte superior, por favor échale un vistazo. – sami

0

solución un poco más complicado que coincide plenamente su especificación

echo `expr $FILENAME : '\(.*\)\.[^.]*'`_`date +%d-%m-%y`.`expr $FILENAME : '.*\.\([^.]*\)'` 

donde primero 'expr' extrae el nombre del archivo sin la extensión, el segundo 'expr' extrae extensión

Cuestiones relacionadas