2014-01-24 10 views
34

Dropbox erleichtert das programmgesteuerte Herunterladen einer einzelnen Datei über curl (EX: curl -O https://dl.dropboxusercontent.com/s/file.ext). Es ist ein wenig komplizierter für einen Ordner (normaler Verzeichnisordner, nicht gezippt). Der gemeinsame Link für einen Ordner, im Gegensatz zu einer Datei, wird nicht direkt mit dem gezippten Ordner verknüpft (Dropbox zieht den Ordner automatisch herunter, bevor er heruntergeladen wird). Es sieht so aus, als könnten Sie einfach ?dl=1 an das Ende des Links hinzufügen, da dies den Download direkt in einem Browser startet. Dies verweist jedoch auf ein intermediäres HTML-Dokument, das in den eigentlichen ZIP-Ordner umleitet und nicht mit curl funktioniert. Gibt es trotzdem einen Curl um einen Ordner über einen geteilten Link herunterzuladen? Mir ist klar, dass die beste Lösung die Verwendung der Dropbox api ist, aber für dieses Projekt ist es wichtig, es so einfach wie möglich zu halten. Außerdem muss die Lösung in ein Bash-Shell-Skript eingebunden werden.Verwenden Sie curl, um einen Dropbox-Ordner über einen freigegebenen Link (nicht öffentliche Verbindung) herunterzuladen

Antwort

70

Es scheint möglich, mit Curl mit der -L Option möglich. Dies zwingt Curl, der Umleitung zu folgen. Darüber hinaus ist es wichtig, einen Ausgabenamen mit einer ZIP-Erweiterung anzugeben, da der Standardwert ein zufälliger alphanumerischer Name ohne Erweiterung ist. Schließlich, vergessen Sie nicht, die ?dl=1 am Ende der Verbindung hinzuzufügen. Ohne es wird curl niemals die Weiterleitungsseite erreichen.

+6

Nizza Spitze 1, ich habe nicht die Dropbox api in einer langen Zeit ausgecheckt, und wirklich wusste nicht, Sie ganze Ordner herunterladen konnte . Ich habe das fast abgelehnt, nur weil du ein USC-Fan bist. : D (Arizona Wildkatzen = # 1!) –

+0

Ha! Danke für die Abstimmung! – USCFan13

+0

Sie müssen keinen Ausgabenamen angeben. Sie können, aber Sie können auch den Remote-Dateinamen oder den Ordner-Namen beibehalten, den Dropbox sendet. Siehe meine Antwort. – bshea

5

Ein freigegebener Link ist immer noch "public", es sei denn, Sie geben einen passwortgeschützten Link an?

1: Ihr unmittelbares Problem ist, dass Curl Redirects nicht folgt.
Dropbox hat nicht so viel umgeleitet, aber scheint es in diesen Tagen regelmäßig zu tun.

2: (Optional) Dropbox sendet bereits einen Content-Disposition-Header mit seinem Dropbox-Dateinamen.
Es gibt keinen Grund, den Dateinamen anzugeben, wenn Sie die richtigen Curl-Flags verwenden.
(Es sei denn, Sie wollen es zwingen (mit -o) auf etwas anderes.)

dies nur in CURL verwenden:

curl https://www.dropbox.com/sh/AAbbCCEeFF123?dl=1 -O -J -L 

Dies wird die Remote-Dateinamen erhalten und alle Umleitungen folgen (3XX Weiterleitungscodes).

Vergessen Sie nicht, ?dl=0-?dl=1
Dieselbe Linie arbeitet individuell geteilt beiden Dateien für den Parameter zu ändern oder ganze Ordner.
(Ordner werden automatisch als .Zip gespeichert - basierend auf dem Ordnernamen).

Consult: https://curl.haxx.se/docs/manpage.html#OPTIONS (Siehe: -O, -J, -L)