Téléchargement de fichiers depuis FTP à l'aide de cURL

20

J'essaie d'utiliser une commande cURL pour télécharger un fichier d'un serveur FTP vers un lecteur local sur mon ordinateur. J'ai essayé

curl " ftp: // myftpsite " - nom d'utilisateur: mot de passe -Q "CWD / users / myfolder /" -O "myfile.raw"

Mais il renvoie une erreur qui dit:

curl: le nom du fichier distant n'a pas de longueur!
curl: essayez 'curl --help' ou 'curl --manual' pour plus d'informations
curl: (6) Impossible de résoudre l'hôte: myfile.raw; Aucun enregistrement de données du type demandé

J'ai essayé d'autres méthodes, mais rien ne semble fonctionner.

De plus, je ne sais pas trop comment spécifier dans quel dossier je veux que le fichier soit téléchargé. Comment ferais-je ça?

Josiah
la source

Réponses:

26

Essayer

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

Dans les URL FTP, le chemin est relatif au répertoire de départ (généralement votre homedir). Vous devez spécifier un chemin absolu, ce qui signifie utiliser %2fpour spécifier /. Cela est nécessaire car le chemin dans les ftp:URL est traité comme une liste de noms séparés par des barres obliques , chacun étant censé être attribué à une CWDcommande distincte . Le %2fest décodé après la division. Voir RFC 1738 et URL FTP .

Quant à l'emplacement de sortie, donnez simplement un chemin vers -o.


Suggestions de sécurité:

  • Ne mettez pas votre mot de passe dans l'URL. Le stocker ~/.netrcn'est pas particulièrement sûr non plus, mais il est au moins caché ps -ef.

  • Votre mot de passe est envoyé en texte clair. Si le serveur le prend en charge, utilisez curl --ssl-reqdoucurl ftps://mysite/...

  • Utiliser SFTP (le protocole de transfert de fichiers SSH) serait encore mieux.

user1686
la source
Fonctionne très bien. Je ne suis pas sûr de bien comprendre comment le% 2f est utilisé, car vous utilisez également /, mais bon, cela fonctionne, donc je ne vais pas me plaindre. Merci pour l'aide!
Josiah
1
@Josiah: Il semble que l'URL « chemin » est divisé par /, et chaque argument est envoyé avec une CWDcommande: %2fusers/myfoldercomme CWD /users, CWD myfolder. Voir RFC 1738 sur ce sujet.
user1686
2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Je l'utilise tout le temps. Il fonctionne comme un charme.

cUrly Stooge
la source
1
Suis-je le premier à remarquer que cette réponse est fausse? Le paramètre -T signifie "téléchargement de fichier", tandis qu'OP a demandé un "téléchargement de fichier"
Kar.ma
0

Essayer:

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

(Si le nom du fichier distant est 'monfichier.raw')


la source
Lorsque j'essaye cela, j'obtiens l'erreur suivante: "curl: (9) Le serveur vous a refusé de passer au répertoire donné". Je crois que c'est pourquoi j'avais besoin d'utiliser la commande -Q "CWD".
0

Comme le suggère yan,

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

devrait fonctionner, mais certains serveurs FTP utilisent des politiques de sécurité qui ne sont pas conformes aux normes. Dans ces cas, l' option --ftp-method singlecwdou --ftp-method nocwdpeut être utile.

Dan
la source