curl pobierz wiele plików ze składnią nawiasu


17

Próbuję pobrać dwa pliki według następującej składni:

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

Problem polega na tym, że tylko pierwszy plik jest zapisywany lokalnie, a drugi został po prostu wydrukowany na standardowe wyjście.

Zdałem sobie sprawę, że jeśli dodam, -Oto działa dobrze:

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

Ale czy to nie jest niepraktyczne, jeśli liczba plików rośnie zbyt duża? Na przykład,

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

Moje pytanie brzmi: czy naprawdę nie ma możliwości pobrania wielu pojedynczych plików jednocześnie curl(bez dodania poprawnej liczby -O)?


1
Dlaczego nie użyć zamiast tego pętli for lub wget?
— Rui F Ribeiro

1
@RuiFRibeiro (1) Tak, mogę użyć pętli. Jestem tylko ciekawy, czy curlmogę to osiągnąć. (2) Rozważam nie tylko HTTP (y), protokoły FTP, np. SFTP.
— Naitree,

Mam na myśli to, że będąc tak potężnym narzędziem, dlaczego curlpo prostu zawodzi przy tak niezbyt trudnej funkcjonalności?
— Naitree,

1
Żeby wyjaśnić, że składnia {}i [](a także *i ?) to globowanie / ekspansja powłoki , curlnigdy ich nie widzi, jest to to samo cocurl url1 url2
— vonbrand

wget nie obsługuje SSL
— MikeW

Odpowiedzi:


9

Aktualizacja: Zostało to zaimplementowane w curl 7.19.0. Zobacz odpowiedź @Besworks.

Według strony podręcznika nie ma sposobu, aby zachować oryginalną nazwę pliku oprócz używania wielu O. Alternatywnie możesz użyć własnych nazw plików:

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

w wyniku czego http://one.site.comzostały zapisane file_one.txti http://two.site.comzapisane file_two.txt.

lub nawet wiele zmiennych, takich jak

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

skutkując http://site.host1.comzbawieniem site_1, http://host.host1.comzbawieniem host_1i tak dalej.


Lub możesz zrobić coś takiegocurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
— Max Coplan


0

Istnieje alternatywny sposób pobierania wielu plików za pomocą curl:

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

Uwaga : obowiązkowe miejsce służy do rozgraniczenia różnych adresów URL.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.