CURL-Name der Quelldatei = Name der Zieldatei

CURL-Name der Quelldatei = Name der Zieldatei

Ich möchte eine Menge Dateien herunterladen, die alle ähnliche Namen haben: xxx/1.jpg, xxx/2.jpg, xxx/3.jpg, und so weiter bis C:/Brawa/. Also schreibe ich:

CURL https://example/xxx/[1-3].jpg -o C:/Brawa/#1.jpg

Jetzt möchte ich, dass der Name der Quelldatei mit dem Namen der Zieldatei übereinstimmt: C:/Brawa/xxx/1.jpg; C:/Brawa/xxx/2.jpg; C:/Brawa/xxx/3.jpg, und so weiter.

Ich verwende die Befehlszeile:

CURL https://example/xxx/[1-3].jpg -o --remote-name C:/Brawa/*.jpg

Irgendetwas funktioniert nicht, aber was habe ich falsch gemacht?

Antwort1

Ich denke, das sollte funktionieren:

CURL https://example/xxx/[1-3].jpg -o --remote-name C:/Brawa/#1.jpg

Antwort2

Optionswerte müssen nebeneinander liegen.Bei allen Unix- oder Unix-basierten Programmen und den meisten C-basierten Programmen müssen Sie, wenn Sie eine Option mit einem Wert angeben, wie hier -o C:/some/path, die Option 'flag' und ihren Wert zusammenhalten, Sie können nichts anderes dazwischen einfügen. In fast allen Fällen können Sie entweder aufeinanderfolgende Argumente wie gezeigt verwenden oder eineinzelverkettetes Argument wie -oC:/some/path(für Kurzform) oder --output=c:/some/path(Gleichheitszeichen für Langform hinzugefügt, also zwei Bindestriche). Dies ist in Windows (CMD) offensichtlicher, wo Sie normalerweise /flag:valuealles zusammen verwenden, was Sie davon abhält, etwas dazwischen einzufügen.

Wie Sie zu harrymcs Antwort kommentiert haben,--remote-name -o c:/some/path analysiertkorrekt, funktioniert aber nicht – das liegt daran, dass diese widersprüchliche Anweisungen geben und nur die erste befolgt wird. -o c:/some/path --remote-namewürde ebenfalls analysieren, aber nur die erste befolgen (was bei einer Datei dazu führen würde, dass alle URLs in dieselbe Datei geschrieben werden und nur die letzte übrig bleibt, und bei einem Verzeichnis würde das Schreiben überhaupt nicht funktionieren).

Abgesehen vonAnaksunamans Antwortdu kannstÄndern Sie das Verzeichniszum gewünschten Ort, verwenden Sienur --remote-name(oder -OGroßbuchstaben, so oder so mitNEINWert), dann ändern Sie das Verzeichnis zurück. CMD unterstützt pushdund popdwie die meisten Unix-Shells, also

 pushd c:\brawa\xxx & curl https://example/xxx/[1-3].jpg -O & popd

Antwort3

Vorausgesetzt, Sie verwenden eine aktuelle Version curl(Version 7.73.0 oder höher), sollten Sie die neue --output-dirOption zum Angeben eines Ausgabeverzeichnisses hinzufügen können, z. B.:

curl https://example/xxx/[1-3].jpg -O --output-dir "C:/Brawa/xxx"

Beachten Sie, dass -O(großes Oh) dasselbe ist wie --remote-nameim obigen Beispiel.

Aktuelle offizielle curlBinärdateien für Windows sind verfügbarHierund die Dokumentation der Optionen für die neuesten Versionen von curlist verfügbarHier.


Beachten Sie, dass Sie zum dynamischen Erstellen von Ordnern die --create-dirsOption curl(gemäß dem Abschnitt der Curl-Manpage für--output-dir). Dies scheint jedoch auf der Option im obigen Beispiel zu basieren --output-dir, sodass die Änderung dieses Wertes möglicherweise zusätzliches Scripting erfordert (ich konnte den inAntwort von harrymcAntwort auf diese Frage: Funktioniert unter Windows 7 einwandfrei).

verwandte Informationen