
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:value
alles 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-name
wü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 -O
Großbuchstaben, so oder so mitNEINWert), dann ändern Sie das Verzeichnis zurück. CMD unterstützt pushd
und popd
wie 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-dir
Option 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-name
im obigen Beispiel.
Aktuelle offizielle curl
Binärdateien für Windows sind verfügbarHierund die Dokumentation der Optionen für die neuesten Versionen von curl
ist verfügbarHier.
Beachten Sie, dass Sie zum dynamischen Erstellen von Ordnern die --create-dirs
Option 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).