• Publicidad

Verificar archivos en FTP

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

Verificar archivos en FTP

Notapor BigBear » 2012-04-14 15:39 @694

¿Cómo se puede verificar cuándo es un directorio o un archivo cuando se usa el módulo Net::FTP cuando uso la función dir() del módulo?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Verificar archivos en FTP

Notapor explorer » 2012-04-14 18:53 @828

Bueno... parece sencillo, ¿no?

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. > perl -MNet::FTP -E '$ftp = Net::FTP->new("localhost", Debug => 0); $ftp->login("anonymous","-anonymous@"); say join "\n", $ftp->dir()'
  2. drwxr-xr-x    2 0          0                4096 Jan 24 20:25 .
  3. drwxr-xr-x    2 0          0                4096 Jan 24 20:25 ..
  4. lrwxrwxrwx    1 0          0                  26 Jan 24 20:25 joaquin -> /home/explorer/public_html
  5.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

El resultado de dir() es una lista de valores. Si los elementos de la lista comienzan con 'd', entonces son directorios. Si es con 'l', enlaces. Si es con 'c', dispositivos. Y si es con '-', archivos.
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: Verificar archivos en FTP

Notapor BigBear » 2012-04-15 11:41 @529

Ok, ¿cómo tendría que hacer la expresión regular para dividir todos los elementos de la respuesta para tenerlos en varias variables, como $nombre, $permisos, $fecha... para usarlos después?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Verificar archivos en FTP

Notapor explorer » 2012-04-15 12:05 @545

Doddy: si haces una pregunta, no te olvides de poner los signos '¿' y '?', porque sino te arriesgas a que nadie te responda.

No necesitas ninguna expresión regular. ¿Te das cuenta de que los campos están separados por espacios en blanco?

Pues con split(" ", $linea) te vale.
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: Verificar archivos en FTP

Notapor BigBear » 2012-04-15 12:14 @552

Ok, gracias, explorer, por la ayuda. El código quedó así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2.  
  3. use Net::FTP;
  4.  
  5. my $ftp  = "localhost";
  6. my $user = "doddy";
  7. my $pass = "doddy";
  8.  
  9. if ( my $socket = Net::FTP->new($ftp) ) {
  10.     if ( $socket->login( $user, $pass ) ) {
  11.  
  12.         if ( my @files = $socket->dir() ) {
  13.  
  14.             for my $fil (@files) {
  15.                 my @to   = split( " ", $fil );
  16.                 my $dir  = @to[0];
  17.                 my $file = @to[8];
  18.                 if ( $dir =~ /^d/ ) {
  19.                     print "[+] Directory : $file\n";
  20.                 }
  21.                 else {
  22.                     print "[+] File : $file\n";
  23.                 }
  24.             }
  25.         }
  26.     }
  27. }
  28.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cualquier sugerencia para mejorar el código aparte de haber tenido que sangrar el código puedes decirla, si quieres.
Última edición por explorer el 2012-04-15 12:21 @556, editado 1 vez en total
Razón: Formateado de código con Perltidy
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Verificar archivos en FTP

Notapor explorer » 2012-04-15 12:25 @559

Esto es un error que comenten los novatos de Perl (a todos nos ha pasado ;) )

En las líneas 16 y 17 asignas una lista de valores de un solo elemento, a un escalar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 my $dir  = @to[0];
  2.                 my $file = @to[8];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Aparéntemente, no pasa nada. La asignación funciona. Pero... en otros ambientes o contextos, podría dar muchos problemas.

Es mejor escribirlo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 my $dir  = $to[0];
  2.                 my $file = $to[8];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

o de forma abreviada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 my($dir, $file) = @to[0,8];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y aquí sí que ponemos la '@', porque se trata de asignar una lista de valores a una lista de variables.
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


Volver a Básico

¿Quién está conectado?

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

cron