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í

-o

Zápis výstupu do pojmenovaného souboru místo stdout

-O

Zápis výstupu do souboru pojmenovaného podle vzdáleného souboru

-L

Automatické sledování HTTP 3xx přesměrování

-C -

Pokračování/obnovení předchozího přenosu souboru

--limit-rate

Omezení rychlosti přenosu na danou hodnotu

--max-filesize

Odmítnutí stahování souborů větších než zadaná velikost

-J

Použití hlavičky Content-Disposition pro pojmenování souboru

-#

Zobrazení průběhu přenosu jako jednoduchý ukazatel průběhu

-u

Zadání uživatelského jména:hesla pro ověření na serveru

--retry

Opakování přenosu při přechodných chybách (počet pokusů)

--retry-delay

Čekání zadaný počet sekund mezi opakováními

-T

Nahrání lokálního souboru na URL (výchozí PUT)

--create-dirs

Vytvoření lokálních adresářů podle potřeby při ukládání výstupu

-s

Potlačení měřiče průběhu a chybových zpráv

--output-dir

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 -L pro zpracování přesměrování a -s pro tichý provoz ve skriptech.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -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ázvem data.csv v 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čů -O pro 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.csv

curl -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 -L curl 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 -L s -o nebo -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.gz

curl -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čku Range, 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čku Range: 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.zip

curl --limit-rate: Omezení rychlosti stahování

Co dělá
Přepínač --limit-rate omezí rychlost stahování (i nahrávání) na zadanou hodnotu. Přijímá přípony: k nebo K pro kilobajty/s, m nebo M pro megabajty/s, g nebo G pro 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.iso

curl --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čky Content-Length) překročí zadaný limit. Velikost může používat přípony jako k, 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.bin

curl -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čce Content-Disposition serveru 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 -J s -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=csv

curl -#: 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.gz

Další možnosti stahování

-u

Zadání uživatelského jména:hesla pro ověření na serveru

--retry

Opakování přenosu při přechodných chybách (počet pokusů)

--retry-delay

Čekání zadaný počet sekund mezi opakováními

-T

Nahrání lokálního souboru na URL (výchozí PUT)

--create-dirs

Vytvoření lokálních adresářů podle potřeby při ukládání výstupu

-s

Potlačení měřiče průběhu a chybových zpráv

--output-dir

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.txt

Stahová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.sql

Stahová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/export

Spolehlivé 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.