2010-04-10 28 views
6

Estoy escribiendo un pequeño script de shellscript que necesita pasar por todas las carpetas y archivos en un servidor ftp (recursivamente). Hasta ahora todo funciona bien usando cURL, pero es bastante lento, porque cURL inicia una nueva sesión para cada comando. Entonces, para 500 directorios, cURL preforma 500 inicios de sesión.Listado de directorios FTP recurrentes en shell/bash con una sola sesión (usando cURL o ftp)

¿Alguien sabe si puedo permanecer conectado usando cURL (esta sería mi solución favorita) o cómo puedo usar ftp con solo una sesión en un script de shell?

sé cómo ejecutar un conjunto de comandos y recuperar la respuesta, pero para el listado recursivo, tiene que ser un poco más dinámica ...

Gracias por su ayuda!

Respuesta

-1

si solo desea crear una lista de todos los archivos y carpetas, puede usar ssh en su lugar. Algo como esto (pero consulte la documentación sobre el uso correcto)

$ ssh [email protected] "ls -R /path" 
+1

Esto realmente no responde la pregunta. No sabemos que tiene acceso de shell. Esto debería ser un comentario. –

0

de conectar con el servidor FTP de manera que acepta comandos de la entrada estándar y escribe en la salida estándar. Cree dos canalizaciones con nombre ("fifos", man mkfifo), redireccione stdin y stdout del comando ftp a cada una de ellas. Luego puede escribir comandos en stdin-connected-fifo y leerlos (línea por línea con bash's read por ejemplo) desde stdout-fifo. A continuación, utilice los resultados para ver dónde debe enviar otro comando de listado (e imprímalo o lo que quiera hacer)

En resumen: No es algo adecuado para bash scripting :) (Hasta que encuentre una herramienta que hace qué desea por sí mismo por supuesto)

9

El comando es en realidad ncftpls -R. Se enumerarán de forma recursiva todos los archivos en una carpeta ftp.

3

Si es posible, trate usign guión lftp:

# lftp script "myscript.lftp" 
open your-ftp-host 
user username password 
cd directory_with_subdirs_u_want_to_list 
find 
exit 

Lo siguiente que u necesidad es escritura del golpe para ejecutar este comando lftp y escribirlo en el archivo:

#!/bin/bash 
lftp -f myscript.lftp > myOutputFile 

myOutputFile contiene ahora el volcado completo de directorios.

+0

la solución 'lftp' realmente funcionará con el servidor FTP de Windows, incluso si se elimina el soporte para' ls -R': http://support.microsoft.com/kb/2007929. Gracias ! – malat

3

Solo para resumir lo que otros han dicho hasta ahora. Si está intentando escribir un script de shell portátil que funciona como archivo por lotes, entonces necesita usar la solución lftp ya que some FTP server no puede implementar ls -R. Basta con sustituir la dirección 123.456.789.100 con la IP real del servidor ftp en los siguientes ejemplos:

$ lftp -c "open 123.456.789.100 && find -l && exit" > listing.txt 

Ver la página de man lftp, vaya a la sección find:

Lista los archivos en el directorio (directorio actual por defecto) recursivamente. Esto puede ayudar a los servidores que carecen de soporte ls -R. Usted puede redirigir la salida de este comando.

Sin embargo, si usted tiene una manera de averiguar si es o no el servidor FTP remoto implementa soporte adecuado para ls -lR, a continuación, una solución mucho mejor (= rápido) será:

$ echo ls -lR | ftp 123.456.789.100 > listing.txt 

Sólo como referencia si ejecuto el primer comando (lftp + find) toma 0m55.384s para recuperar el listado completo, mientras que si ejecuto el segundo (ftp + ls-R), toma 0m3.225s.