Descargar archivo de FTP usando cURL

20

Estoy tratando de usar un comando cURL para descargar un archivo de un servidor FTP a una unidad local en mi computadora. He intentado

curl " ftp: // myftpsite " - nombre de usuario: contraseña -Q "CWD / users / myfolder /" -O "myfile.raw"

Pero devuelve un error que dice:

curl: ¡El nombre del archivo remoto no tiene longitud!
curl: intente 'curl --help' o 'curl --manual' para obtener más información
curl: (6) No se pudo resolver host: myfile.raw; No hay registro de datos del tipo solicitado

He probado algunos otros métodos, pero nada parece funcionar.

Además, no estoy muy seguro de cómo especificar a qué carpeta quiero que se descargue el archivo. ¿Como podría hacerlo?

Josiah
fuente

Respuestas:

26

Tratar

curl -u user:password 'ftp://mysite/%2fusers/myfolder/myfile/raw' -o ~/Downloads/myfile.raw

En las URL de FTP, la ruta es relativa al directorio de inicio (generalmente su homedir). Debe especificar una ruta absoluta, y eso significa usar %2fpara especificar /. Esto es necesario porque la ruta en las ftp:URL se trata como una lista de nombres separados por barras , cada uno de los cuales se supone que debe asignarse a un CWDcomando separado . El %2fse decodifica después de dividir. Consulte RFC 1738 y URL de FTP .

En cuanto a la ubicación de salida, solo dé una ruta a -o.


Sugerencias de seguridad:

  • No pongas tu contraseña en la URL. Almacenarlo tampoco ~/.netrces particularmente seguro, pero al menos está oculto ps -ef.

  • Su contraseña se envía en texto claro. Si el servidor lo admite, use curl --ssl-reqdocurl ftps://mysite/...

  • Usar SFTP (el protocolo de transferencia de archivos SSH) sería aún mejor.

usuario1686
fuente
Funcionó muy bien. No estoy seguro de comprender completamente cómo se usa% 2f, ya que también está usando /, pero bueno, funciona, así que no me voy a quejar. ¡Gracias por la ayuda!
Josiah
1
@Josiah: Parece que el "camino" URL es dividida por /, y cada argumento se envía con un CWDcomando: %2fusers/myfoldercomo CWD /users, CWD myfolder. Ver RFC 1738 sobre este tema.
user1686
2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Uso esto todo el tiempo. Funciona a las mil maravillas.

títere chiflado
fuente
1
¿Soy el primero en notar que esta respuesta es incorrecta? El parámetro -T significa "carga de archivos", mientras que OP solicitó "descarga de archivos"
Kar.ma
0

Tratar:

curl "ftp://user:password@myftpsite/users/myfolder/myfile.raw"

(Si el nombre del archivo remoto es 'myfile.raw')


fuente
Cuando intento eso, aparece el siguiente error: "curl: (9) El servidor le negó que cambie al directorio dado". Creo que es por eso que necesitaba usar el comando -Q "CWD".