2011-01-23 17 views
21

Soy muy consciente de poder hacer find myfile.txt -mtime +5 para verificar si mi archivo es anterior a 5 días o no. Sin embargo, me gustaría buscar mtime en días de myfile.txt y almacenarlo en una variable para su uso posterior. ¿Como podría hacerlo?bash - ¿Obtener mtime del archivo específico?

Respuesta

43

stat le puede dar esa información:

filemtime=`stat -c %Y myfile.txt` 

%Y le da la última modificación como "segundos desde la época", pero hay muchas otras opciones; more info. Así que si el archivo se ha modificado el 2011-01-22 a las 15:30 GMT, lo anterior podría devolver un número en la región de 1295710237.

Editar: Ah, desea que el tiempo en días desde que se modificó . Eso va a ser más complicado, sobre todo porque un "día" no es un período fijo de tiempo (algunos "días" tienen solo 23 horas, otros 25   — gracias al horario de verano).

La versión ingenua podría tener este aspecto:

filemtime=`stat -c %Y $1` 
currtime=`date +%s` 
diff=$(((currtime - filemtime)/86400)) 
echo $diff 

... pero de nuevo, esto es suponiendo que un día es siempre exactamente 86.400 segundos de largo.

Más sobre aritmética en bash here.

+0

Eso fue dulce, desafortunadamente me hice el tonto y olvidé que necesitaba la edad mtime en días. ¿Es eso posible? – Industrial

+0

@Industrial: Una vez que tenga el valor, puede hacer cálculos matemáticos sobre él. No entiendo lo que quieres decir con "... la edad mtime en días". (¿Días desde cuándo? ¿Quiere decir, cuántos días atrás se modificó?) –

+0

Se perdió la parte sobre días, vote +1 – Anders

2

¿Esto es la respuesta?

A=$(stat -c "%y" myfile.txt) 

vistazo a STAT-ayuda

stat --help 
Usage: stat [OPTION]... FILE... 
Display file or file system status. 
[...] 
-c --format=FORMAT use the specified FORMAT instead of the default; 
         output a newline after each use of FORMAT 
[...] 
The valid format sequences for files 
[...] 
    %y Time of last modification, human-readable 
    %Y Time of last modification, seconds since Epoch 
[...] 
3
AGE=$(perl -e 'print -M $ARGV[0]' $file) 

establecerá $ AGE a la edad de archivo $ en día, como operador de Perl -M se encarga de la stat llamada y la conversión al día para usted .

El valor de retorno es un valor de punto flotante (por ejemplo, 6.62849537 días). Añadir un int a la expresión si es necesario tener un resultado entero

AGE=$(perl -e 'print int -M $ARGV[0]' $file) 

Ruby y Python también tienen sus chistes a STAT un archivo y volver algunos datos, pero creo que Perl tiene la forma más concisa.

+0

¡Esta es una mejor respuesta que la aceptada! – Anne

Cuestiones relacionadas