• Publicidad

Bajar ficheros con Net::FTP

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

Re: Bajar ficheros con Net::FTP

Notapor mariomb19 » 2012-05-11 08:01 @376

Ok, muchas gracias, pero esos archivos existen porque los veo por Filezila, sin problemas. Lo descargo solo de manera manual y los veo, ¿qué puedo hacer...?
mariomb19
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2012-04-30 09:39 @444

Publicidad

Re: Bajar ficheros con Net::FTP

Notapor explorer » 2012-05-11 08:21 @390

A ver... No debería haber problemas para bajar archivos que se "ven" y que se pueden bajar "manualmente" con el Filezilla. Todo consiste en que Net::FTP sepa entrar al directorio remoto correcto, active el protocolo correcto (pasivo/activo, ascii/binario), y lo baje.

Eso sí... una vez me encontré con un caso de un servidor FTP que no admitía bajadas con intervalos de tiempo entre bajadas muy cortos, por lo que tuve que poner un sleep 1; o sleep 2; antes de la bajada del siguiente archivo, para que le diese tiempo a "respirar" al pobre servidor FTP.

Aún no me has respondido a la pregunta de si los archivos txt están en varios niveles de profundidad o todos en el mismo directorio.

Si todo está en el mismo directorio, es fácil hacer todo eso con solo Net::FTP. Incluso existen módulos que lo simplifican aún más, como Net::FTP::File.

Pero con Net::FTP debería ser suficiente: te conectas, vas al directorio, sacas un listado de los archivos disponibles con ls() o con dir(), y luego recorrer ese listado, bajando cada archivo.

Más... no se me ocurre...
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: Bajar ficheros con Net::FTP

Notapor mariomb19 » 2012-05-11 13:47 @616

Buenas tardes, disculpa las molestias. Hice este código pero todavía no se bajan todos solo algunos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use Net::FTP;
  4. use File::chdir;
  5.  
  6. my $username = "XXXXXX";
  7. my $pwd      = "XXXXXXX";
  8.  
  9. my $ftp = Net::FTP->new("XXX.XXX.XXX.XXX") or die("No se pudo conectar al servidor: $!");
  10. $ftp->login( $username, $pwd ) or die("Login incorrecto: $!");
  11.  
  12. chdir '/home/rocco/dir2/';             # nos colocamos en el directorio donde dejaremos los archivos
  13.  
  14. $ftp->cwd('/');                        # directorio en el servidor remoto
  15.  
  16. my @linea_listado = $ftp->ls("/");
  17.  
  18. my $linea_listado = "@linea_listado";
  19.  
  20. for $linea_listado (@linea_listado) {
  21.  
  22.     next if $linea_listado =~ m/((fi_sir_*?|sapfi_rechazo_.*?_HCM_*?)_.*?\.txt)/;
  23.     $ftp->get("$linea_listado") or die "get failed ", $ftp->message;
  24.     $linea_listado++;
  25.  
  26. }
  27.  
  28. $ftp->quit or die("No se puedo desconectar del servidor: $!");
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Este es el error:

get failed //bin: not a plain file.

Ayuda, por favor.
mariomb19
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2012-04-30 09:39 @444

Re: Bajar ficheros con Net::FTP

Notapor explorer » 2012-05-11 17:16 @761

El bucle sería así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for $linea_listado (@linea_listado) {
  2.     if ($linea_listado =~ m/((?:fi_sir_.*?|sapfi_rechazo_.*?_HCM_.*?)_.*?\.txt)/) {
  3.         print "Bajando [$1]\n";
  4.         $ftp->get($1) or die "get failed: " . $ftp->message;
  5.     }
  6. }
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: Bajar ficheros con Net::FTP

Notapor mariomb19 » 2012-05-14 09:45 @448

Muchas gracias, de verdad, por tu ayuda. Cambié el for() por foreach() y me salió bien. Hasta luego.
mariomb19
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2012-04-30 09:39 @444

Re: Bajar ficheros con Net::FTP

Notapor explorer » 2012-05-14 10:12 @466

mariomb19 escribiste:Cambié el for() por foreach()
Y, ¿por qué has hecho eso? Si es lo mismo for() que foreach()...

Bueno, no, no es lo mismo. Con 'foreach' tienes que escribir cuatro letras más.

Pues nada... si te gusta escribir cuatro letras más, es cosa tuya ;)
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: Bajar ficheros con Net::FTP

Notapor mariomb19 » 2012-05-18 14:09 @631

Buenas tardes, disculpen la molestia ante todo, tengo un problema, me he dado cuenta el servidor remoto tiene archivos como fi_sir_20122712_20123456.txt.z cuando filtro
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  for $linea_listado (@linea_listado) {
  2.         if ($linea_listado =~ m/((fi_sir_.*?|sapfi_rechazo_.*?_HCM_.*?)_.*?\.txt)/) {
  3.             print "Bajando [$1]\n";
  4.             $ftp->get($1) or die "get failed: " . $ftp->message;
  5.         }
  6.     }
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Los baja también. ¿Cómo corto la expresión regular para que solo baje .txt?

Gracias.
mariomb19
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2012-04-30 09:39 @444

Re: Bajar ficheros con Net::FTP

Notapor mariomb19 » 2012-05-18 15:29 @686

Ya lo resolví, pero gracias, le agregué el símbolo '$' al final del .txt y bajó bien.
mariomb19
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2012-04-30 09:39 @444

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 17 invitados

cron