Download di file da FTP utilizzando cURL


20

Sto cercando di utilizzare un comando cURL per scaricare un file da un server FTP su un'unità locale sul mio computer. ho provato

curl " ftp: // myftpsite " - nome utente: password -Q "CWD / users / myfolder /" -O "myfile.raw"

Ma restituisce un errore che dice:

ricciolo: il nome del file remoto non ha lunghezza!
curl: prova 'curl --help' o 'curl --manual' per maggiori informazioni
curl: (6) Impossibile risolvere l'host: myfile.raw; Nessun record di dati del tipo richiesto

Ho provato altri metodi, ma nulla sembra funzionare.

Inoltre, non sono del tutto sicuro di come specificare in quale cartella scaricare il file. Come potrei farlo?

Risposte:


26

Provare

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

Negli URL FTP, il percorso è relativo alla directory iniziale (di solito il tuo homedir). È necessario specificare un percorso assoluto e ciò significa che utilizzare %2fper specificare /. Ciò è necessario perché il percorso negli ftp:URL viene trattato come un elenco di nomi separati da barra , ognuno dei quali dovrebbe essere assegnato a un CWDcomando separato . La %2fviene decodificato dopo la scissione. Vedi RFC 1738 e URL FTP .

Per quanto riguarda la posizione di output, basta dare un percorso a -o.


Suggerimenti sulla sicurezza:

  • Non inserire la password nell'URL. Memorizzarlo non ~/.netrcè nemmeno particolarmente sicuro, ma almeno è nascosto ps -ef.

  • La tua password viene inviata in chiaro. Se il server lo supporta, utilizzare curl --ssl-reqdocurl ftps://mysite/...

  • L'uso di SFTP (il protocollo di trasferimento file SSH) sarebbe ancora meglio.


Ha funzionato alla grande. Non sono sicuro di aver compreso appieno come viene utilizzato% 2f, dato che stai usando anche /, ma hey funziona, quindi non mi lamento. Grazie per l'aiuto!
Josiah

1
@Josiah: Sembra che l'URL "percorso" è diviso da /, e ogni argomento viene inviato con un CWDcomando: %2fusers/myfoldercome CWD /users, CWD myfolder. Vedi RFC 1738 su questo argomento.
user1686

2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Lo uso sempre. Esso funziona magicamente.


1
Sono il primo a notare che questa risposta è sbagliata? Il parametro -T significa "upload di file", mentre OP ha richiesto "download di file"
Kar.ma

0

Provare:

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

(Se il nome del file remoto è 'myfile.raw')


Quando provo quello, ottengo il seguente errore: "curl: (9) Il server ti ha negato di passare alla directory indicata". Credo che sia per questo che avevo bisogno di usare il comando -Q "CWD".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.