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?

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.


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.


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)


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.