Jak stahovat soubory pomocí curl
curl je jeden z nejuniverzálnějších nástrojů příkazového řádku pro stahování souborů přes HTTP, HTTPS, FTP a desítky dalších protokolů. Ať už potřebujete uložit jednu odpověď API do souboru nebo automatizovat hromadné stahování v shell skriptu, curl má pro to přepínač. Tento průvodce pokrývá každou možnost související se stahováním — od základního ukládání souborů pomocí -o a -O přes obnovení přerušených přenosů pomocí -C -, omezení šířky pásma pomocí --limit-rate až po zobrazení ukazatelů průběhu. Každý přepínač obsahuje jasné vysvětlení, běžné vzory použití a příklad připravený ke kopírování.
Rychlý přehled přepínačů pro stahování
Zápis výstupu do pojmenovaného souboru místo stdout
Zápis výstupu do souboru pojmenovaného podle vzdáleného souboru
Automatické sledování HTTP 3xx přesměrování
Pokračování/obnovení předchozího přenosu souboru
Omezení rychlosti přenosu na danou hodnotu
Odmítnutí stahování souborů větších než zadaná velikost
Použití hlavičky Content-Disposition pro pojmenování souboru
Zobrazení průběhu přenosu jako jednoduchý ukazatel průběhu
Zadání uživatelského jména:hesla pro ověření na serveru
Opakování přenosu při přechodných chybách (počet pokusů)
Čekání zadaný počet sekund mezi opakováními
Nahrání lokálního souboru na URL (výchozí PUT)
Vytvoření lokálních adresářů podle potřeby při ukládání výstupu
Potlačení měřiče průběhu a chybových zpráv
Uložení výstupního souboru(ů) do zadaného adresáře (curl 7.73+)
curl -o: Uložení s konkrétním názvem souboru
- Co dělá
- Přepínač
-o(nebo--output) říká curl, aby uložil tělo odpovědi do souboru, který zadáte. Bez něj curl vytiskne odpověď na stdout (váš terminál). Můžete použít libovolný název souboru a cestu — curl soubor vytvoří nebo přepíše existující. - Běžné použití
- Použijte
-o, když potřebujete kontrolovat přesný název souboru nebo uložit do konkrétního adresáře. Funguje s jakýmkoli protokolem — HTTP, HTTPS, FTP, SFTP a dalšími. Kombinujte s-Lpro zpracování přesměrování a-spro tichý provoz ve skriptech.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -O: Uložení s názvem vzdáleného souboru
- Co dělá
- Přepínač
-O(nebo--remote-name) uloží stažený soubor s použitím názvu souboru extrahovaného z URL. Například pokud URL končí na/data.csv, curl vytvoří soubor s názvemdata.csvv aktuálním adresáři. - Běžné použití
- Použijte
-O, když je název vzdáleného souboru smysluplný a nepotřebujete ho přejmenovat. Můžete předat více přepínačů-Opro stažení několika souborů jedním příkazem. Poznámka: pokud URL neobsahuje název souboru (např. končí/), curl selže — použijte místo toho-o.
$ curl -O https://example.com/files/data.csvcurl -L: Sledování přesměrování
- Co dělá
- Přepínač
-L(nebo--location) způsobí, že curl automaticky sleduje HTTP přesměrování — 301 (Moved Permanently), 302 (Found), 307 a 308. Bez-Lcurl vrátí samotnou odpověď přesměrování místo skutečného obsahu. - Běžné použití
- Většina URL pro stahování přesměruje alespoň jednou (např. z HTTP na HTTPS nebo z krátkého URL na skutečný soubor). Při stahování souborů vždy kombinujte
-Ls-onebo-O. Výchozím nastavením curl sleduje až 50 přesměrování; změňte to pomocí--max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -C -: Obnovení přerušeného stahování
- Co dělá
- Přepínač
-C -(nebo--continue-at -) říká curl, aby automaticky detekoval velikost existujícího částečného souboru a obnovil stahování od místa, kde skončilo. Server musí podporovat HTTP hlavičkuRange, aby to fungovalo. - Běžné použití
- Pokud bylo velké stahování přerušeno síťovým problémem nebo timeoutem, jednoduše spusťte stejný příkaz znovu s přidaným
-C -. curl odešle hlavičkuRange: bytes=OFFSET-a stáhne pouze zbývající data. To je zásadní pro velké soubory přes nespolehlivá připojení.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: Omezení rychlosti stahování
- Co dělá
- Přepínač
--limit-rateomezí rychlost stahování (i nahrávání) na zadanou hodnotu. Přijímá přípony:kneboKpro kilobajty/s,mneboMpro megabajty/s,gneboGpro gigabajty/s. - Běžné použití
- Použijte
--limit-rate, abyste se vyhnuli zahlcení šířky pásma při stahování velkých souborů, zejména na sdílených připojeních. Hodí se také pro testování, jak vaše aplikace zvládá pomalé odpovědi.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: Přerušení pokud je soubor příliš velký
- Co dělá
- Přepínač
--max-filesizeříká curl, aby přerušil přenos, pokud očekávaná velikost souboru (z hlavičkyContent-Length) překročí zadaný limit. Velikost může používat přípony jakok,M,G. - Běžné použití
- Použijte ve skriptech, abyste zabránili neočekávaně velkým stahováním, která by spotřebovala místo na disku. Uvědomte si, že ne všechny servery odesílají
Content-Length— v tom případě curl nemůže tento limit vynutit a stahování pokračuje normálně.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Použití názvu souboru navrženého serverem
- Co dělá
- Přepínač
-J(nebo--remote-header-name) říká curl, aby použil název souboru uvedený v hlavičceContent-Dispositionserveru místo jeho odvození z URL. To je běžné u stahovacích API, která vracejí soubory se smysluplnými názvy. - Běžné použití
- Vždy kombinujte
-Js-O. To je užitečné, když URL je koncový bod API (jako/export?format=csv), ale server vrací správný název souboru v hlavičkách. Bezpečnostní poznámka: server kontroluje název souboru, proto používejte pouze s důvěryhodnými servery.
$ curl -L -O -J https://example.com/api/export?format=csvcurl -#: Zobrazení ukazatele průběhu
- Co dělá
- Přepínač
-#(nebo--progress-bar) nahradí výchozí podrobný měřič průběhu jednoduchým ukazatelem průběhu###. Ten je snáze čitelný pro interaktivní použití. - Běžné použití
- Použijte
-#při interaktivním stahování, když chcete přehledný indikátor průběhu. Pro skripty upřednostněte-s(tichý) nebo výchozí měřič průběhu. Výchozí výstup curl již zobrazuje rychlost, procenta, zbývající čas a celkovou velikost.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzDalší možnosti stahování
Zadání uživatelského jména:hesla pro ověření na serveru
Opakování přenosu při přechodných chybách (počet pokusů)
Čekání zadaný počet sekund mezi opakováními
Nahrání lokálního souboru na URL (výchozí PUT)
Vytvoření lokálních adresářů podle potřeby při ukládání výstupu
Potlačení měřiče průběhu a chybových zpráv
Uložení výstupního souboru(ů) do zadaného adresáře (curl 7.73+)
Reálné scénáře stahování
Tyto příklady kombinují více přepínačů pro řešení běžných úloh stahování, se kterými se setkáte při každodenním vývoji a skriptování.
Stažení více souborů najednou
Použijte více přepínačů -O pro stažení několika souborů jedním příkazem. curl je zpracovává postupně. Pro paralelní stahování použijte xargs nebo GNU parallel.
$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txtStahování z FTP serveru
curl nativně podporuje FTP, FTPS a SFTP. Pro ověřený přístup přidejte -u user:password. Pro zachování názvu vzdáleného souboru použijte -O.
$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sqlStahování s ověřením
Použijte -u user:pass pro Basic Auth nebo -H pro předání Bearer tokenu nebo API klíče. Kombinujte s -L a -o pro kompletní stahování.
$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/exportSpolehlivé stahování s obnovením a opakováním
Kombinujte -C - (obnovení), --retry (automatické opakování při selhání) a -L (sledování přesměrování) pro robustní stahování, která přežijí výpadky sítě.
$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zipČasto kladené otázky o stahování pomocí curl
Jaký je rozdíl mezi curl -o a curl -O?
-o filename uloží stahování s přesným názvem souboru, který zadáte. -O extrahuje název souboru z URL a použije ho. Použijte -o, když chcete vlastní název nebo cestu; použijte -O, když je název vzdáleného souboru v pořádku.
Proč curl stahuje prázdný nebo HTML soubor místo skutečného souboru?
URL pravděpodobně vrací HTTP přesměrování (301 nebo 302). Ve výchozím nastavení curl uloží samotnou odpověď přesměrování — ne finální obsah. Přidejte -L pro automatické sledování přesměrování: curl -L -o file URL.
Jak obnovím částečně stažený soubor pomocí curl?
Použijte curl -C - -o filename URL. Přepínač -C - detekuje velikost existujícího souboru a odešle hlavičku Range pro požadavek pouze zbývajících bajtů. Server musí podporovat požadavky na rozsah, aby to fungovalo.
Jak omezím rychlost stahování v curl?
Použijte --limit-rate s hodnotou a příponou: curl --limit-rate 500k -o file URL omezí rychlost na 500 KB/s. Přípony: k (KB/s), M (MB/s), G (GB/s).
Může curl stáhnout více souborů najednou?
Ano. Použijte více přepínačů -O: curl -O URL1 -O URL2 -O URL3. curl je stahuje postupně. Pro paralelní stahování předejte seznam URL do xargs -P 4 -I {} curl -O {}.
Jak stáhnu soubor vyžadující ověření?
Pro HTTP Basic Auth: curl -u user:pass -o file URL. Pro Bearer tokeny: curl -H "Authorization: Bearer TOKEN" -o file URL. Pro API klíče v hlavičkách: curl -H "X-API-Key: KEY" -o file URL.
Jak stáhnu soubory z FTP serveru pomocí curl?
Použijte curl -u user:pass -o localfile ftp://host/path/file. curl nativně podporuje FTP, FTPS (FTP přes TLS) a SFTP (SSH FTP). Pro anonymní FTP vynechte -u.
Jak spolehlivě stáhnu velké soubory pomocí curl?
Kombinujte -C - (obnovení při selhání), --retry 5 (automatické opakování), --retry-delay 10 a -L (sledování přesměrování): curl -C - --retry 5 --retry-delay 10 -L -o file URL. To automaticky zvládne síťové problémy.
Jak zobrazím ukazatel průběhu při stahování pomocí curl?
Použijte curl -# -o file URL pro jednoduchý ukazatel průběhu. Výchozí výstup curl již zobrazuje rychlost přenosu, procenta a odhadovaný čas. Pro skripty použijte -s pro potlačení veškerého výstupu.
Mohu v curl zadat adresář pro stahování?
S curl 7.73+ použijte --output-dir /path/to/dir v kombinaci s -O. Pro starší verze zadejte úplnou cestu pomocí -o /path/to/dir/filename. Pokud adresář ještě neexistuje, přidejte --create-dirs.
Mám pro stahování souborů použít curl nebo wget?
Oba jsou vynikající. wget je jednodušší pro rekurzivní zrcadlení webů a má vestavěnou logiku opakování. curl podporuje 25+ protokolů (nejen HTTP/FTP), je lepší pro API volání a skriptování, podporuje více metod ověření a je dostupný prakticky na každém operačním systému.
Jak použiji curl v bash skriptu pro stahování souborů?
Použijte curl -fsSL -o file URL: -f tiše selže při HTTP chybách (neuloží se chybová stránka), -s tichý, -S zobrazí chyby i v tichém režimu, -L sleduje přesměrování. Zkontrolujte návratový kód: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.