Herunterladen der Datei von FTP mithilfe von cURL

20

Ich versuche, mit einem cURL-Befehl eine Datei von einem FTP-Server auf ein lokales Laufwerk meines Computers herunterzuladen. ich habe es versucht

curl " ftp: // myftpsite " - Benutzername: Passwort -Q "CWD / users / myfolder /" -O "myfile.raw"

Es wird jedoch ein Fehler zurückgegeben, der besagt:

curl: Der entfernte Dateiname hat keine Länge!
curl: versuchen Sie 'curl --help' oder 'curl --manual' für weitere Informationen
curl: (6) Host konnte nicht aufgelöst werden: myfile.raw; Kein Datensatz des angeforderten Typs

Ich habe einige andere Methoden ausprobiert, aber nichts scheint zu funktionieren.

Außerdem weiß ich nicht genau, in welchen Ordner die Datei heruntergeladen werden soll. Wie würde ich das machen?

Josiah
quelle

Antworten:

26

Versuchen

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

In FTP-URLs ist der Pfad relativ zum Startverzeichnis (normalerweise Ihr Homedir). Sie müssen einen absoluten Pfad angeben, und das bedeutet, dass Sie %2fzum Angeben verwenden müssen /. Dies ist erforderlich, da der Pfad in ftp:URLs als Liste mit durch Schrägstriche getrennten Namen behandelt wird , von denen jeder einem separaten CWDBefehl zugewiesen werden soll. Das %2fwird nach dem Aufteilen dekodiert . Siehe RFC 1738- und FTP-URLs .

Geben Sie für den Ausgabeort einfach einen Pfad an -o.


Sicherheitsvorschläge:

  • Geben Sie Ihr Passwort nicht in die URL ein. Das Speichern ~/.netrcist auch nicht besonders sicher, aber es ist zumindest verborgen ps -ef.

  • Ihr Passwort wird im Klartext gesendet. Wenn der Server dies unterstützt, verwenden Sie curl --ssl-reqdodercurl ftps://mysite/...

  • Die Verwendung von SFTP (das SSH-Dateiübertragungsprotokoll) wäre sogar noch besser.

Grawity
quelle
Hat super funktioniert. Ich bin mir nicht ganz sicher, wie% 2f verwendet wird, da Sie auch / verwenden, aber hey, es funktioniert, also werde ich mich nicht beschweren. Danke für die Hilfe!
Josiah
1
@Josiah: Es scheint , dass die URL „Pfad“ wird geteilt durch /, und jedes Argument mit einem gesendeten CWDBefehl ein : %2fusers/myfolderwie CWD /users, CWD myfolder. Siehe RFC 1738 zu diesem Thema.
Grawity
2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Ich benutze das die ganze Zeit. Es wirkt wie ein Zauber.

Curly Handlanger
quelle
1
Bin ich der erste, der merkt, dass diese Antwort falsch ist? Der Parameter -T bedeutet "Datei-Upload", während OP nach "Datei-Download" fragte
Kar.ma
0

Versuchen:

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

(Wenn der Name der Remote-Datei "myfile.raw" lautet)


quelle
Wenn ich das versuche, erhalte ich die folgende Fehlermeldung: "curl: (9) Server hat dir den Wechsel in das angegebene Verzeichnis verweigert". Ich glaube, es war der Grund, warum ich den Befehl -Q "CWD" verwenden musste.
0

Wie Yan vorschlägt,

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

sollte funktionieren, aber einige FTP-Server verwenden Sicherheitsrichtlinien, die nicht standardkonform sind. In diesen Fällen kann die Option --ftp-method singlecwdoder --ftp-method nocwdhilfreich sein.

Dan
quelle