• Publicidad

Obtener fecha modificación de un archivo en Linux

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Obtener fecha modificación de un archivo en Linux

Notapor felipe » 2006-08-08 15:58 @707

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....
felipe
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 1
Registrado: 2006-08-08 15:45 @698

Publicidad

Notapor explorer » 2006-08-08 16:27 @727

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
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12925
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados