• Publicidad

Contar archivos de forma recursiva en %tmp%

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

Contar archivos de forma recursiva en %tmp%

Notapor zkizzik » 2011-01-11 19:50 @868

Estaba haciendo un script en Perl en dos partes... una donde detecta si hay más de 5 archivos de forma recursiva dentro del directorio temporal de Windows y otro script que vacía el mismo directorio.

Hice un script pero no me funciona, algo hice mal. Yo estoy acostumbrado a codear en PHP y hacer retornos recursivos dentro de las mismas funciones autollamándose pero al parecer acá no funciona:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print c_dir($ENV{TMP})." archivos.\n";
  2.  
  3. sub c_dir{
  4.  $dir = shift;
  5.  opendir(TEMP ,$dir) or return 0;
  6.  @ar = readdir(TEMP) or return 0;
  7.  closedir(TEMP);
  8.  
  9.  $n = 0;
  10.  foreach my $f (@ar){
  11.   unless(($f eq '.') || ($f eq '..')){
  12.    if(-d $ENV{TMP}.'\\'.$f){
  13.     print "[dir]".$f."\n";
  14.     $n = $n + c_dir($ENV{TMP}.'\\'.$f.'\\');
  15.    }else{
  16.     print "[file]".$f."\n";
  17.     $n++;
  18.    }
  19.   }
  20.  }
  21.  return $n;
  22. }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


El problema es que el primer directorio detectado está vacío y no sé si eso es lo que me da problemas o el hecho de hacer autollamadas a la misma función.

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. [dir]Acrobat Distiller 8
  2. 0 archivos.
  3. Presione una tecla para continuar . . .
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Ahora la otra pregunta... ¿es más eficiente eliminar archivo por archivo y luego cada directorio? ¿o habrá alguna función nativa en la versión Strawberry?
zkizzik
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2007-10-15 18:26 @810

Publicidad

Re: Contar archivos de forma recursiva en %tmp%

Notapor Leo_Gutierrez » 2011-01-11 20:47 @908

No le veo mucho caso el hacer las llamadas recursivas.

¿No convendría mejor usar File::Find?
Leo_Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 91
Registrado: 2008-08-20 23:38 @026

Re: Contar archivos de forma recursiva en %tmp%

Notapor zkizzik » 2011-01-11 20:52 @911

Busqué información sobre esa clase pero no me funcionó.
Ahora sí me anda, usando push() de un código que encontré por ahí:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl
  2. use strict;
  3.  
  4. sub list{
  5.  my ($dir) = @_;
  6.  return unless -d $dir;
  7.  my @files;
  8.  if(opendir my $dh, $dir){
  9.    my @list;
  10.    my $file;
  11.    while($file = readdir $dh){
  12.      push @list, $file;
  13.    }
  14.    closedir $dh;
  15.    for $file (@list){
  16.      next if $file eq '.' || $file eq '..';
  17.      push @files, "$dir/$file"        if -f "$dir/$file";
  18.      push @files, list ("$dir/$file") if -d "$dir/$file";
  19.    }
  20.  }
  21.  return @files;
  22. }
  23.  
  24. if(scalar(list($ENV{WINDIR} .'\\Temp')) > 2){
  25.  exit 1;
  26. }
  27. exit 0;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Gracias de todas formas.
zkizzik
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2007-10-15 18:26 @810

Re: Contar archivos de forma recursiva en %tmp%

Notapor explorer » 2011-01-12 08:07 @380

Pues es extraño que no te funcione File::Find... es muy fácil de usar. Por ejemplo:

perl -E 'use File::Find; find(sub {say $File::Find::name}, ".")'

(En Windows, hay que intercambiar las comillas dobles con las simples).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Contar archivos de forma recursiva en %tmp%

Notapor zkizzik » 2011-01-12 14:27 @643

Muchas gracias.
zkizzik
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2007-10-15 18:26 @810


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados

cron