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
Zapísať výstup do pomenovaného súboru namiesto stdout
Zapísať výstup do súboru s názvom vzdialeného súboru
Automaticky sledovať HTTP 3xx presmerovania
Pokračovať/obnoviť predchádzajúci prenos súboru
Obmedziť rýchlosť prenosu na zadanú hodnotu
Odmietnuť sťahovanie súborov väčších ako zadaná veľkosť
Použiť hlavičku Content-Disposition na pomenovanie súboru
Zobraziť priebeh prenosu ako jednoduchý ukazovateľ
Zadať meno:heslo pre autentifikáciu na serveri
Zopakovať prenos pri prechodných chybách (počet pokusov)
Čakať tento počet sekúnd medzi pokusmi
Nahrať lokálny súbor na URL (predvolene PUT)
Vytvoriť lokálne adresáre podľa potreby pri ukladaní výstupu
Potlačiť ukazovateľ priebehu a chybové hlásenia
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-Lpre spracovanie presmerovaní a-spre tichú prevádzku v skriptoch.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -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ázvomdata.csvv 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-Ona 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.csvcurl -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-Lcurl 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
-Ls-oalebo-Opri 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.gzcurl -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čkuRange, 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čkuRange: 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.zipcurl --limit-rate: Obmedzenie rýchlosti sťahovania
- Čo robí
- Prepínač
--limit-rateobmedzuje rýchlosť sťahovania (a nahrávania) na zadanú hodnotu. Akceptuje prípony:kaleboKpre kilobajty/s,maleboMpre megabajty/s,galeboGpre 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.isocurl --max-filesize: Prerušenie pri príliš veľkom súbore
- Čo robí
- Prepínač
--max-filesizehovorí curl, aby prerušil prenos, ak očakávaná veľkosť súboru (z hlavičkyContent-Length) prekročí zadaný limit. Veľkosť môže používať prípony akok,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.bincurl -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čkeContent-Dispositionservera 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
-Js-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=csvcurl -#: 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
Zadať meno:heslo pre autentifikáciu na serveri
Zopakovať prenos pri prechodných chybách (počet pokusov)
Čakať tento počet sekúnd medzi pokusmi
Nahrať lokálny súbor na URL (predvolene PUT)
Vytvoriť lokálne adresáre podľa potreby pri ukladaní výstupu
Potlačiť ukazovateľ priebehu a chybové hlásenia
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.txtSť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.sqlSť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/exportSpoľ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.