Locken Sie mehrere Dateien mit geschweiften Klammern herunter


17

Ich versuche, zwei Dateien mit der folgenden Syntax herunterzuladen:

curl -O http://domain/path/to/{file1,file2}

Das Problem ist, dass nur die erste Datei lokal gespeichert wird und die zweite einfach auf stdout gedruckt wurde.

Ich habe festgestellt, dass -Oes gut funktioniert , wenn ich ein hinzufüge :

curl -OO http://domain/path/to/{file1,file2}

Aber ist das nicht unpraktisch, wenn die Anzahl der Dateien zu groß wird? Beispielsweise,

curl -O http://domain/path/to/file[1,100]

Meine Frage ist, gibt es wirklich keine Möglichkeit, mehrere einzelne Dateien gleichzeitig mit herunterzuladen curl(ohne eine korrekte Anzahl von -O)?


1
Warum nicht stattdessen eine for-Schleife oder wget verwenden?
Rui F Ribeiro

1
@RuiFRibeiro (1) Ja, ich kann loop benutzen. Ich bin nur gespannt, ob ich curles schaffen kann. (2) Ich berücksichtige nicht nur HTTP (s), FTP-Protokolle, z. B. SFTP.
Naitree,

Ich meine, ein so mächtiges Werkzeug zu sein, warum curlscheitert es einfach an dieser nicht so harten Funktionalität?
Naitree,

1
Nur um zu verdeutlichen, dass die Syntax {}und [](und auch *und ?) Shell- Globbing / curlcurl url1 url2
-Erweiterung

wget behandelt SSL nicht
MikeW

Antworten:


9

Update: Dies wurde in curl 7.19.0 implementiert. Siehe @Besworks Antwort.

Laut der Manpage gibt es keine Möglichkeit, den ursprünglichen Dateinamen beizubehalten, außer wenn mehrere O's verwendet werden. Alternativ können Sie auch eigene Dateinamen verwenden:

curl http://{one,two}.site.com -o "file_#1.txt"

was dazu führt, http://one.site.comdass gespeichert file_one.txtund http://two.site.comgespeichert wird file_two.txt.

oder auch mehrere Variablen mögen

curl http://{site,host}.host[1-5].com -o "#1_#2"

was dazu führt, http://site.host1.comdass gespeichert wird in site_1, http://host.host1.comgespeichert wird in host_1und so weiter.


Oder Sie könnten etwas tun wiecurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Max Coplan


0

Es gibt eine alternative Möglichkeit, mehrere Dateien mit curl herunterzuladen:

urls="firstUrl secondUrl thirdUrl" 
for url in $urls
do
   curl -O "$url"
done

Hinweis : Das obligatorische Leerzeichen dient zum Abgrenzen verschiedener URLs.

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.