Ako sťahovať súbory pomocou curl

curl je jeden z najuniverzálnejších nástrojov príkazového riadku na sťahovanie súborov cez HTTP, HTTPS, FTP a desiatky ďalších protokolov. Či už potrebujete uložiť odpoveď API do súboru alebo automatizovať hromadné sťahovanie v shell skripte, curl má na to prepínač. Táto príručka pokrýva všetky možnosti súvisiace so sťahovaním — od základného ukladania súborov pomocou -o a -O po obnovenie prerušených prenosov s -C -, obmedzenie šírky pásma pomocou --limit-rate a zobrazenie ukazovateľov priebehu. Každý prepínač obsahuje jasné vysvetlenie, bežné vzory použitia a príklad pripravený na skopírovanie.

Rýchly prehľad prepínačov sťahovania

-o

Zapísať výstup do pomenovaného súboru namiesto stdout

-O

Zapísať výstup do súboru s názvom vzdialeného súboru

-L

Automaticky sledovať HTTP 3xx presmerovania

-C -

Pokračovať/obnoviť predchádzajúci prenos súboru

--limit-rate

Obmedziť rýchlosť prenosu na zadanú hodnotu

--max-filesize

Odmietnuť sťahovanie súborov väčších ako zadaná veľkosť

-J

Použiť hlavičku Content-Disposition na pomenovanie súboru

-#

Zobraziť priebeh prenosu ako jednoduchý ukazovateľ

-u

Zadať meno:heslo pre autentifikáciu na serveri

--retry

Zopakovať prenos pri prechodných chybách (počet pokusov)

--retry-delay

Čakať tento počet sekúnd medzi pokusmi

-T

Nahrať lokálny súbor na URL (predvolene PUT)

--create-dirs

Vytvoriť lokálne adresáre podľa potreby pri ukladaní výstupu

-s

Potlačiť ukazovateľ priebehu a chybové hlásenia

--output-dir

Uložiť výstupné súbory do zadaného adresára (curl 7.73+)

curl -o: Uložiť s konkrétnym názvom súboru

Čo robí
Prepínač -o (alebo --output) hovorí curl, aby uložil telo odpovede do súboru, ktorý zadáte. Bez neho curl vypíše odpoveď na stdout (váš terminál). Môžete použiť ľubovoľný názov súboru a cestu — curl vytvorí súbor alebo prepíše existujúci.
Bežné použitie
Použite -o, keď potrebujete ovládať presný názov súboru alebo uložiť do konkrétneho adresára. Funguje s akýmkoľvek protokolom — HTTP, HTTPS, FTP, SFTP a ďalšie. Kombinujte s -L pre spracovanie presmerovaní a -s pre tichú prevádzku v skriptoch.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -O: Uložiť s názvom súboru zo servera

Čo robí
Prepínač -O (alebo --remote-name) uloží stiahnutý súbor s názvom extrahovaným z URL. Napríklad, ak URL končí na /data.csv, curl vytvorí súbor s názvom data.csv v aktuálnom adresári.
Bežné použitie
Použite -O, keď je názov vzdialeného súboru zmysluplný a nepotrebujete ho premenovať. Môžete zadať viacero prepínačov -O na stiahnutie niekoľkých súborov jedným príkazom. Poznámka: ak URL neobsahuje názov súboru (napr. končí na /), curl zlyhá — použite namiesto toho -o.
$ curl -O https://example.com/files/data.csv

curl -L: Sledovanie presmerovaní

Čo robí
Prepínač -L (alebo --location) spôsobí, že curl automaticky sleduje HTTP presmerovania — 301 (Moved Permanently), 302 (Found), 307 a 308. Bez -L curl vráti samotnú odpoveď presmerovania namiesto skutočného obsahu.
Bežné použitie
Väčšina URL na sťahovanie presmeruje aspoň raz (napr. z HTTP na HTTPS alebo z krátkej URL na skutočný súbor). Vždy kombinujte -L s -o alebo -O pri sťahovaní súborov. Štandardne curl sleduje až 50 presmerovaní; zmeňte to pomocou --max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gz

curl -C -: Obnovenie prerušených sťahovaní

Čo robí
Prepínač -C - (alebo --continue-at -) hovorí curl, aby automaticky zistil veľkosť existujúceho čiastočného súboru a obnovil sťahovanie od miesta, kde bolo prerušené. Server musí podporovať HTTP hlavičku Range, aby to fungovalo.
Bežné použitie
Ak bolo veľké sťahovanie prerušené problémom so sieťou alebo časovým limitom, jednoducho znova spustite rovnaký príkaz s pridaným -C -. curl odošle hlavičku Range: bytes=OFFSET- a stiahne iba zostávajúce dáta. To je nevyhnutné pre veľké súbory cez nespoľahlivé pripojenia.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate: Obmedzenie rýchlosti sťahovania

Čo robí
Prepínač --limit-rate obmedzuje rýchlosť sťahovania (a nahrávania) na zadanú hodnotu. Akceptuje prípony: k alebo K pre kilobajty/s, m alebo M pre megabajty/s, g alebo G pre gigabajty/s.
Bežné použitie
Použite --limit-rate, aby ste nepresýtili svoju šírku pásma pri sťahovaní veľkých súborov, najmä na zdieľaných pripojeniach. Je tiež užitočný na testovanie správania vašej aplikácie pri pomalých odpovediach.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize: Prerušenie pri príliš veľkom súbore

Čo robí
Prepínač --max-filesize hovorí curl, aby prerušil prenos, ak očakávaná veľkosť súboru (z hlavičky Content-Length) prekročí zadaný limit. Veľkosť môže používať prípony ako k, M, G.
Bežné použitie
Použite v skriptoch na zabránenie neočakávane veľkým sťahovaniam, ktoré zaberú miesto na disku. Nie všetky servery posielajú Content-Length — v takom prípade curl nemôže vynútiť tento limit a sťahovanie pokračuje normálne.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J: Použitie názvu súboru navrhnutého serverom

Čo robí
Prepínač -J (alebo --remote-header-name) hovorí curl, aby použil názov súboru uvedený v hlavičke Content-Disposition servera namiesto odvodenia z URL. Toto je bežné pre API na sťahovanie, ktoré vracajú súbory so zmysluplnými názvami.
Bežné použitie
Vždy kombinujte -J s -O. Toto je užitočné, keď URL je API endpoint (ako /export?format=csv), ale server vráti správny názov súboru v hlavičkách. Bezpečnostná poznámka: server kontroluje názov súboru, preto používajte iba s dôveryhodnými servermi.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -#: Zobrazenie ukazovateľa priebehu

Čo robí
Prepínač -# (alebo --progress-bar) nahradí predvolený podrobný ukazovateľ priebehu jednoduchým ukazovateľom ###. Je ľahšie čitateľný pre interaktívne použitie.
Bežné použitie
Použite -# pri interaktívnom sťahovaní, keď chcete čistý ukazovateľ priebehu. Pre skripty uprednostnite -s (tichý) alebo predvolený ukazovateľ. Predvolený výstup curl už zobrazuje rýchlosť, percento, zostávajúci čas a celkovú veľkosť.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

Ďalšie možnosti sťahovania

-u

Zadať meno:heslo pre autentifikáciu na serveri

--retry

Zopakovať prenos pri prechodných chybách (počet pokusov)

--retry-delay

Čakať tento počet sekúnd medzi pokusmi

-T

Nahrať lokálny súbor na URL (predvolene PUT)

--create-dirs

Vytvoriť lokálne adresáre podľa potreby pri ukladaní výstupu

-s

Potlačiť ukazovateľ priebehu a chybové hlásenia

--output-dir

Uložiť výstupné súbory do zadaného adresára (curl 7.73+)

Praktické scenáre sťahovania

Tieto príklady kombinujú viacero prepínačov na riešenie bežných úloh sťahovania, s ktorými sa stretnete pri každodennom vývoji a skriptovaní.

Stiahnutie viacerých súborov naraz

Použite viacero prepínačov -O na stiahnutie niekoľkých súborov jedným príkazom. curl ich spracuje postupne. Pre paralelné sťahovanie použite xargs alebo GNU parallel.

$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txt

Sťahovanie z FTP servera

curl natívne podporuje FTP, FTPS a SFTP. Pridajte -u user:password pre autentifikovaný prístup. Použite -O na zachovanie názvu vzdialeného súboru.

$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sql

Sťahovanie s autentifikáciou

Použite -u user:pass pre Basic Auth alebo -H na odoslanie Bearer tokenu alebo API kľúča. Kombinujte s -L a -o pre kompletné sťahovanie.

$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/export

Spoľahlivé sťahovanie s obnovením a opakovaním

Kombinujte -C - (obnovenie), --retry (automatické opakovanie pri zlyhaní) a -L (sledovanie presmerovaní) pre robustné sťahovania, ktoré prežijú výpadky siete.

$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zip

Často kladené otázky o sťahovaní pomocou curl

Aký je rozdiel medzi curl -o a curl -O?

-o filename uloží stiahnutý súbor s presným názvom, ktorý zadáte. -O extrahuje názov súboru z URL a použije ho. Použite -o, keď chcete vlastný názov alebo cestu; použite -O, keď je názov vzdialeného súboru vyhovujúci.

Prečo curl sťahuje prázdny alebo HTML súbor namiesto skutočného súboru?

URL pravdepodobne vracia HTTP presmerovanie (301 alebo 302). Štandardne curl uloží samotnú odpoveď presmerovania — nie konečný obsah. Pridajte -L na automatické sledovanie presmerovaní: curl -L -o file URL.

Ako obnovím čiastočne stiahnutý súbor pomocou curl?

Použite curl -C - -o filename URL. Prepínač -C - zistí veľkosť existujúceho súboru a odošle hlavičku Range na vyžiadanie iba zostávajúcich bajtov. Server musí podporovať požiadavky na rozsah, aby to fungovalo.

Ako obmedzím rýchlosť sťahovania v curl?

Použite --limit-rate s hodnotou a príponou: curl --limit-rate 500k -o file URL obmedzí rýchlosť na 500 KB/s. Prípony: k (KB/s), M (MB/s), G (GB/s).

Môže curl stiahnuť viacero súborov naraz?

Áno. Použite viacero prepínačov -O: curl -O URL1 -O URL2 -O URL3. curl ich stiahne postupne. Pre paralelné sťahovanie presmerujte zoznam URL do xargs -P 4 -I {} curl -O {}.

Ako stiahnem súbor vyžadujúci autentifikáciu?

Pre HTTP Basic Auth: curl -u user:pass -o file URL. Pre Bearer tokeny: curl -H "Authorization: Bearer TOKEN" -o file URL. Pre API kľúče v hlavičkách: curl -H "X-API-Key: KEY" -o file URL.

Ako stiahnem súbory z FTP servera pomocou curl?

Použite curl -u user:pass -o localfile ftp://host/path/file. curl natívne podporuje FTP, FTPS (FTP cez TLS) a SFTP (SSH FTP). Pre anonymné FTP vynechajte -u.

Ako spoľahlivo stiahnem veľké súbory pomocou curl?

Kombinujte -C - (obnovenie pri zlyhaní), --retry 5 (automatické opakovanie), --retry-delay 10 a -L (sledovanie presmerovaní): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Toto automaticky zvládne výpadky siete.

Ako zobrazím ukazovateľ priebehu pri sťahovaní pomocou curl?

Použite curl -# -o file URL pre jednoduchý ukazovateľ priebehu. Predvolený výstup curl už zobrazuje rýchlosť prenosu, percento a odhadovaný čas. Pre skripty použite -s na potlačenie celého výstupu.

Môžem zadať adresár na sťahovanie v curl?

S curl 7.73+ použite --output-dir /path/to/dir v kombinácii s -O. Pre staršie verzie zadajte úplnú cestu pomocou -o /path/to/dir/filename. Pridajte --create-dirs, ak adresár ešte neexistuje.

Mám na sťahovanie súborov použiť curl alebo wget?

Oba sú vynikajúce. wget je jednoduchší pre rekurzívne zrkadlenie webových stránok a má vstavanú logiku opakovania. curl podporuje viac ako 25 protokolov (nielen HTTP/FTP), je lepší pre API volania a skriptovanie, podporuje viac metód autentifikácie a je dostupný prakticky na každom operačnom systéme.

Ako použijem curl v bash skripte na sťahovanie súborov?

Použite curl -fsSL -o file URL: -f ticho zlyhá pri HTTP chybách (bez uloženej chybovej stránky), -s tichý, -S zobrazí chyby aj v tichom režime, -L sleduje presmerovania. Skontrolujte návratový kód: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.