Página 1 de 1

Obtener fecha modificación de un archivo en Linux

NotaPublicado: 2006-08-08 15:58 @707
por felipe
Estoy necesitando obtener solamente el año de modificación de un archivo y no lo estoy logrando.
Entre las varias cosas que estuve probando son:
Código: Seleccionar todo
#!/usr/bin/perl -w
use Time::localtime;
use File::stat;

@mensajes_log=`find /var/log -name messages -prune -type f` or die ("No encontramos el archivo MESSAGES :-( ... verificar!!!");
print "$mensajes_log[0]";
chomp ($mensajes_log[0]);
$modificacion_messagges[0] = ctime(stat($mensajes_log[0])->mtime);

print "La fecha de modificacion del archivos messages es: modificacion_messagges[0]   \n";
@dividiendo_fecha = split (/\s/,$modificacion_messages[0]);
@anho = $dividiendo_fecha[4];
print "El año de modificación de  archivos messages es: $anho[0] \n";


Gracias por cualquier ayuda....

NotaPublicado: 2006-08-08 16:27 @727
por explorer
La respuesta está escrita en el perlfaq5 (http://perldoc.perl.org/perlfaq5.html#H ... -timestamp).

En resumen:
* Depende de la plataforma que estés usando, es decir, el sistema operativo. Leer perlpot para los detalles.
* Las funciones -A, -M y -C devuelven la fecha del fichero con respecto al momento en que se arrancó el programa. Ver perlfunc.
* Para recuperar la fecha del fichero con respecto al epoch se usa stat y para pasar ese tiempo a algo más humano, se usa localtime, gmtime o strftime.

En tu caso, para sacar el año de modificación del fichero, se podría hacer:
Código: Seleccionar todo
#!/usr/bin/perl -l

$fichero = '/var/log/messages';
$tiempo  = (stat( $fichero ))[9];    # Tiempo de modificación en segundos desde epoch
$year = (localtime $tiempo)[5] + 1900;
print $year; # 2006
Y sin usar ningún módulo extra. Se puede usar File::stat para acceder de forma más cómoda a los valores de stat() y Time::localtime para no tener que acordarnos que el año está en sexto lugar del localtime...
Código: Seleccionar todo
#!/usr/bin/perl -l
use Time::localtime;
use File::stat;

$fichero = '/var/log/messages';
$year = localtime(stat($fichero)->mtime)->year()+1900;
print $year; # 2006