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, -O
to 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
)?
curl
mogę to osiągnąć. (2) Rozważam nie tylko HTTP (y), protokoły FTP, np. SFTP.curl
po prostu zawodzi przy tak niezbyt trudnej funkcjonalności?{}
i[]
(a także*
i?
) to globowanie / ekspansja powłoki ,curl
nigdy ich nie widzi, jest to to samo cocurl url1 url2
Odpowiedzi:
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:
w wyniku czego
http://one.site.com
zostały zapisanefile_one.txt
ihttp://two.site.com
zapisanefile_two.txt
.lub nawet wiele zmiennych, takich jak
skutkując
http://site.host1.com
zbawieniemsite_1
,http://host.host1.com
zbawieniemhost_1
i tak dalej.źródło
curl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Zdaję sobie sprawę, że odpowiedź na to pytanie jest już zaakceptowana, ale uważam, że powinienem wskazać, że jest na to sposób.
Ta
--remote-name-all
opcja informuje curl, aby zachowywał się tak, jakbyś używał-O
lub--remote-name
dla każdego pliku.https://curl.haxx.se/docs/manpage.html#--remote-name-all
Ta opcja jest dostępna od wersji 7.19.0
https://curl.haxx.se/changes.html#7_19_0
źródło
Istnieje alternatywny sposób pobierania wielu plików za pomocą curl:
Uwaga : obowiązkowe miejsce służy do rozgraniczenia różnych adresów URL.
źródło