Página 1 de 1

Eliminar ficheros de directorio en función de la fecha

NotaPublicado: 2014-03-30 04:11 @216
por enric73
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.003 segundos, usando GeSHi 1.0.8.4


pero no chuta... ¿alguna ayuda?

Gracias.

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

NotaPublicado: 2014-03-30 08:39 @402
por explorer
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.001 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

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

NotaPublicado: 2014-04-13 05:22 @265
por enric73
Gracias, explorer.

Saludos