Zapisz plik w określonym folderze za pomocą polecenia curl

182

W skrypcie powłoki chcę pobrać plik z jakiegoś adresu URL i zapisać go w określonym folderze. Jakiej konkretnej flagi CLI należy użyć, aby pobrać pliki do określonego folderu za pomocą curlpolecenia lub jak inaczej uzyskać ten wynik?

Ziyaddin Sadigov
źródło
Wydawałoby się, że programowanie bash jest programowaniem ...
rjurney

Odpowiedzi:

281

Nie sądzę, że możesz podać ścieżkę zwijania się, ale możesz CD do lokalizacji, pobrać i CD z powrotem.

cd target/path && { curl -O URL ; cd -; }

Lub za pomocą podpowłoki.

(cd target/path && curl -O URL)

Oba sposoby zostaną pobrane tylko wtedy, gdy istnieje ścieżka. -Ozachowuje nazwę zdalnego pliku. Po pobraniu wróci do oryginalnej lokalizacji.

Jeśli chcesz jawnie ustawić nazwę pliku, możesz użyć małej -oopcji:

curl -o target/path/filename URL
Atle
źródło
2
Mam następującą komendę: curl -LOk basename /packagesgithub.com/ziyaddin/xampp/archive/master.zip ”. Ale mówi, że zła nazwa pliku ->basename /packages
Ziyaddin Sadigov
10
Możesz także użyć podpowłoki, tak jak (cd target/path; curl -O URL)
poniżej
9
Jaka jest różnica między nimi? Pierwsza płyta CD znajduje się w katalogu i pobiera plik, a następnie wychodzi na dysk CD. Drugi pozostaje w bieżącym katalogu i zawija plik do określonej lokalizacji. Drugi wydaje się prostszy.
Henry Zhu,
9
@HenryZhu W pierwszym pliku nazwa pliku pochodzi od nazwy pliku na serwerze. W drugim momencie zmieniasz nazwę pobranej treści na podaną przez Ciebie nazwę.
turtlemonvh
4
Naprawdę chciałbym opcję określenia katalogu, ale użyj nazwy pliku serwera. Wydaje się, że używanie cdjest obecnie najlepszą opcją, choć wydaje się nieco nieeleganckie.
StockB
4

curlnie ma opcji (bez podania nazwy pliku), ale wgetma. Katalog może być względny lub bezwzględny. Ponadto katalog zostanie utworzony automatycznie, jeśli nie istnieje.

wget -P relative/dir "$url"

wget -P /absolute/dir "$url"
wisbucky
źródło