• Publicidad

Eliminar ficheros de directorio en función de la fecha

¿Eres administrador de sistemas? Este foro es para todos aquellos temas relacionados con el uso de Perl para administración de sistemas.

Eliminar ficheros de directorio en función de la fecha

Notapor enric73 » 2014-03-30 04:11 @216

Hola, compañeros.

Deseo eliminar ficheros de un directorio que caduquen en dos días respecto el día actual.

El nombre de los ficheros tiene el siguiente formato: WC_2014032700.dat, WC_2014032712.dat...

He pensado en utilizar el nombre del fichero, aislar la cifra y compararla con la fecha actual para saber si son caducos y luego eliminar... pero me he quedado atascadillo. Muestro el código...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use Class::Date qw(date now);
  3. use File::Path;
  4. use File::Copy;
  5. $n                        = 2;
  6. $hoy                      = now;
  7. $data_limit               = $hoy - "$n D";
  8. $Class::Date::DATE_FORMAT = "%Y%m%d%H";
  9.  
  10. chdir($dir);
  11. open( LS, "ls |" ) or die $!;
  12. while (<LS>) {
  13.     chomp( $data = $_ );
  14.     @data  = split( /_/, $data );      #separo el nombre por el guión
  15.     @data2 = split( /./, $data[1] );   #separo el elemento data[1] por el punto
  16.  
  17.     $data3 = date $data2[0] . "0000";
  18.     if ( $data3 < $data_limit ) {
  19.         rmtree( $dir . "/WC_" . $data3 . ".dat" ) or die $!;
  20.     }
  21. }
  22. close(LS);
  23. }
  24.  
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


pero no chuta... ¿alguna ayuda?

Gracias.
Última edición por explorer el 2014-03-30 07:38 @360, editado 3 veces en total
Razón: Formateado de código con Perltidy y poner marcas Perl
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Publicidad

Re: Eliminar ficheros de directorio en función de la fecha

Notapor explorer » 2014-03-30 08:39 @402

Sí que había algún que otro problema...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use Class::Date qw(date now);
  3. use File::Path;
  4. use File::Copy;
  5. $n                        = 2;
  6. $hoy                      = now;
  7. $data_limit               = $hoy - "$n D";
  8. $Class::Date::DATE_FORMAT = "%Y%m%d%H";
  9.  
  10. my $dir = '.';
  11. chdir($dir);
  12. open( LS, "ls |" ) or die $!;
  13. while (<LS>) {
  14.     chomp( $data = $_ );
  15.     @data  = split( /_/, $data );       # separo el nombre por el guión
  16.     @data2 = split( /\./, $data[1] );   # separo el elemento data[1] por el punto
  17.  
  18.     $data3 = date($data2[0] . '000000');
  19.     if ( $data3 < $data_limit ) {
  20.         rmtree( $dir . "/WC_" . $data3 . ".dat" ) or die $!;
  21.         #print  ( $dir . "/WC_" . $data3 . ".dat", "\n");
  22.     }
  23. }
  24. close(LS);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
El tema estaba en no escapar el '.' en la expresión regular del segundo split(). Y que faltaba un '00' a la hora de confeccionar la fecha para $data3.

Esta es mi propia versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;                                      # activamos las nuevas características
  3. use File::Copy;
  4. use POSIX 'strftime';
  5.  
  6. my $lapso  = 2;
  7. my $limite = strftime "%Y%m%d", localtime( time - $lapso * 86_400 );
  8. my $dir    = '.';
  9.  
  10. chdir($dir);
  11.  
  12. while (<WC_*>) {                                # recorremos todos los archivos
  13.     my ($fecha) = /WC_(\d+)/;                   # sacamos la fecha
  14.  
  15.     if ( $fecha < $limite ) {                   # si es menor que el límite
  16.         say "$fecha < $limite. Borrar [$_]";    # lo procesamos
  17.     }
  18. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Eliminar ficheros de directorio en función de la fecha

Notapor enric73 » 2014-04-13 05:22 @265

Gracias, explorer.

Saludos
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311


Volver a Administración

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado