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?

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.


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.


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')


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".

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.