Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Obtener fecha modificación de un archivo en Linux

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mar Ago 08, 2006 2:58 pm
felipe
Perlero Nuevo
Perlero Nuevo
Registrado: 08 Ago 2006
Mensajes: 1
Obtener fecha modificación de un archivo en Linux Responder citando

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:
#!/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....
Mensaje Mar Ago 08, 2006 3:27 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

La respuesta está escrita en el perlfaq5 (http://perldoc.perl.org/perlfaq5.html#How-do-I-get-a-file's-timestamp-in-perl%3f-timestamp-file%2c-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:
#!/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:
#!/usr/bin/perl -l
use Time::localtime;
use File::stat;

$fichero = '/var/log/messages';
$year = localtime(stat($fichero)->mtime)->year()+1900;
print $year; # 2006
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group