Како преузимати фајлове помоћу curl

curl је један од најсвестранијих алата командне линије за преузимање фајлова преко HTTP, HTTPS, FTP и десетина других протокола. Било да треба да сачувате одговор API у фајл или аутоматизујете масовно преузимање у shell скрипти, curl има опцију за то. Овај водич покрива све опције везане за преузимање — од основног чувања фајлова помоћу -o и -O до наставка прекинутих трансфера са -C -, ограничавања пропусног опсега помоћу --limit-rate и приказивања трака напретка. Свака опција укључује јасно објашњење, уобичајене обрасце коришћења и пример спреман за копирање.

Брзи преглед опција за преузимање

-o

Записати излаз у фајл са наведеним именом уместо stdout

-O

Записати излаз у фајл са именом удаљеног фајла

-L

Аутоматски пратити HTTP 3xx преусмеравања

-C -

Наставити/обновити претходни трансфер фајла

--limit-rate

Ограничити брзину трансфера на задату вредност

--max-filesize

Одбити преузимање фајлова већих од наведене величине

-J

Користити Content-Disposition заглавље за именовање фајла

-#

Приказати напредак трансфера као једноставну траку напретка

-u

Навести корисничко_име:лозинку за аутентификацију на серверу

--retry

Поновити трансфер при пролазним грешкама (број покушаја)

--retry-delay

Сачекати овај број секунди између покушаја

-T

Отпремити локални фајл на URL (подразумевано PUT)

--create-dirs

Креирати локалне директоријуме по потреби при чувању излаза

-s

Потиснути индикатор напретка и поруке о грешкама

--output-dir

Сачувати излазне фајлове у наведени директоријум (curl 7.73+)

curl -o: Чување са одређеним именом фајла

Шта ради
Опција -o (или --output) говори curl-у да сачува тело одговора у фајл који наведете. Без ње, curl исписује одговор на stdout (ваш терминал). Можете користити било које име фајла и путању — curl ће креирати фајл или преписати постојећи.
Уобичајено коришћење
Користите -o када треба да контролишете тачно име фајла или да сачувате у одређени директоријум. Ради са било којим протоколом — HTTP, HTTPS, FTP, SFTP и другим. Комбинујте са -L за праћење преусмеравања и -s за тихи режим у скриптама.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -O: Чување са именом фајла са сервера

Шта ради
Опција -O (или --remote-name) чува преузети фајл користећи име извучено из URL-а. На пример, ако се URL завршава са /data.csv, curl креира фајл под именом data.csv у тренутном директоријуму.
Уобичајено коришћење
Користите -O када је име удаљеног фајла смислено и не треба да га преименујете. Можете проследити више -O опција за преузимање неколико фајлова једном командом. Напомена: ако URL не садржи име фајла (нпр. завршава се са /), curl ће пропасти — користите -o уместо тога.
$ curl -O https://example.com/files/data.csv

curl -L: Праћење преусмеравања

Шта ради
Опција -L (или --location) чини да curl аутоматски прати HTTP преусмеравања — 301 (Moved Permanently), 302 (Found), 307 и 308. Без -L, curl враћа сам одговор преусмеравања уместо стварног садржаја.
Уобичајено коришћење
Већина URL-ова за преузимање преусмерава бар једном (нпр. са HTTP на HTTPS или са кратког URL-а на стварни фајл). Увек комбинујте -L са -o или -O при преузимању фајлова. Подразумевано curl прати до 50 преусмеравања; промените ово помоћу --max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gz

curl -C -: Наставак прекинутих преузимања

Шта ради
Опција -C - (или --continue-at -) говори curl-у да аутоматски детектује величину постојећег делимичног фајла и настави преузимање од места где је стало. Сервер мора подржавати HTTP заглавље Range да би ово функционисало.
Уобичајено коришћење
Ако је велико преузимање прекинуто проблемом мреже или истеком времена, једноставно поново покрените исту команду са додатим -C -. curl ће послати заглавље Range: bytes=OFFSET- и преузети само преостале податке. Ово је кључно за велике фајлове преко нестабилних конекција.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate: Ограничавање брзине преузимања

Шта ради
Опција --limit-rate ограничава брзину преузимања (и отпремања) на задату вредност. Прихвата суфиксе: k или K за килобајте/с, m или M за мегабајте/с, g или G за гигабајте/с.
Уобичајено коришћење
Користите --limit-rate да избегнете засићење пропусног опсега при преузимању великих фајлова, посебно на дељеним конекцијама. Такође је корисно за тестирање понашања апликације при спорим одговорима.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize: Прекид ако је фајл превелик

Шта ради
Опција --max-filesize говори curl-у да прекине трансфер ако очекивана величина фајла (из заглавља Content-Length) прелази наведени лимит. Величина може користити суфиксе попут k, M, G.
Уобичајено коришћење
Користите у скриптама да спречите неочекивано велика преузимања која троше простор на диску. Имајте на уму да не шаљу сви сервери Content-Length — у том случају curl не може применити овај лимит и преузимање се наставља нормално.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J: Коришћење имена фајла предложеног од сервера

Шта ради
Опција -J (или --remote-header-name) говори curl-у да користи име фајла наведено у заглављу Content-Disposition сервера уместо извођења из URL-а. Ово је уобичајено за API-је за преузимање који враћају фајлове са смисленим именима.
Уобичајено коришћење
Увек комбинујте -J са -O. Ово је корисно када је URL API endpoint (попут /export?format=csv) али сервер враћа одговарајуће име фајла у заглављима. Безбедносна напомена: сервер контролише име фајла, па користите само са поузданим серверима.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -#: Приказ траке напретка

Шта ради
Опција -# (или --progress-bar) замењује подразумевани детаљни индикатор напретка једноставном траком ###. Лакше се чита за интерактивно коришћење.
Уобичајено коришћење
Користите -# при интерактивном преузимању када желите чист индикатор напретка. За скрипте, преферирајте -s (тихи) или подразумевани индикатор. Подразумевани излаз curl-а већ приказује брзину, проценат, преостало време и укупну величину.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

Додатне опције преузимања

-u

Навести корисничко_име:лозинку за аутентификацију на серверу

--retry

Поновити трансфер при пролазним грешкама (број покушаја)

--retry-delay

Сачекати овај број секунди између покушаја

-T

Отпремити локални фајл на URL (подразумевано PUT)

--create-dirs

Креирати локалне директоријуме по потреби при чувању излаза

-s

Потиснути индикатор напретка и поруке о грешкама

--output-dir

Сачувати излазне фајлове у наведени директоријум (curl 7.73+)

Практични сценарији преузимања

Ови примери комбинују више опција за решавање уобичајених задатака преузимања са којима ћете се сусрести у свакодневном развоју и скриптовању.

Преузимање више фајлова одједном

Користите више -O опција за преузимање неколико фајлова једном командом. curl их обрађује секвенцијално. За паралелна преузимања, користите xargs или GNU parallel.

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

Преузимање са FTP сервера

curl нативно подржава FTP, FTPS и SFTP. Додајте -u user:password за аутентификовани приступ. Користите -O за задржавање имена удаљеног фајла.

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

Преузимање са аутентификацијом

Користите -u user:pass за Basic Auth или -H за прослеђивање Bearer токена или API кључа. Комбинујте са -L и -o за комплетно преузимање.

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

Поуздано преузимање са наставком и поновним покушајима

Комбинујте -C - (наставак), --retry (аутоматски поновни покушај при неуспеху) и -L (праћење преусмеравања) за робусна преузимања која преживљавају прекиде мреже.

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

Често постављана питања о преузимању помоћу curl

Која је разлика између curl -o и curl -O?

-o filename чува преузимање са тачним именом фајла које наведете. -O извлачи име фајла из URL-а и користи га. Користите -o када желите прилагођено име или путању; користите -O када је име удаљеног фајла одговарајуће.

Зашто curl преузима празан или HTML фајл уместо стварног фајла?

URL вероватно враћа HTTP преусмеравање (301 или 302). Подразумевано, curl чува сам одговор преусмеравања — не крајњи садржај. Додајте -L за аутоматско праћење преусмеравања: curl -L -o file URL.

Како наставити делимично преузети фајл помоћу curl?

Користите curl -C - -o filename URL. Опција -C - детектује величину постојећег фајла и шаље заглавље Range да затражи само преостале бајтове. Сервер мора подржавати захтеве опсега да би ово функционисало.

Како ограничити брзину преузимања у curl?

Користите --limit-rate са вредношћу и суфиксом: curl --limit-rate 500k -o file URL ограничава брзину на 500 KB/s. Суфикси: k (KB/s), M (MB/s), G (GB/s).

Може ли curl преузети више фајлова одједном?

Да. Користите више -O опција: curl -O URL1 -O URL2 -O URL3. curl их преузима секвенцијално. За паралелна преузимања, проследите листу URL-ова у xargs -P 4 -I {} curl -O {}.

Како преузети фајл који захтева аутентификацију?

За HTTP Basic Auth: curl -u user:pass -o file URL. За Bearer токене: curl -H "Authorization: Bearer TOKEN" -o file URL. За API кључеве у заглављима: curl -H "X-API-Key: KEY" -o file URL.

Како преузети фајлове са FTP сервера помоћу curl?

Користите curl -u user:pass -o localfile ftp://host/path/file. curl нативно подржава FTP, FTPS (FTP преко TLS) и SFTP (SSH FTP). За анонимни FTP, изоставите -u.

Како поуздано преузети велике фајлове помоћу curl?

Комбинујте -C - (наставак при неуспеху), --retry 5 (аутоматски поновни покушај), --retry-delay 10 и -L (праћење преусмеравања): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Ово аутоматски решава проблеме мреже.

Како приказати траку напретка при преузимању помоћу curl?

Користите curl -# -o file URL за једноставну траку напретка. Подразумевани излаз curl-а већ приказује брзину трансфера, проценат и процењено време. За скрипте, користите -s за потискивање целог излаза.

Могу ли навести директоријум за преузимање у curl?

Са curl 7.73+, користите --output-dir /path/to/dir у комбинацији са -O. За старије верзије, наведите пуну путању помоћу -o /path/to/dir/filename. Додајте --create-dirs ако директоријум још не постоји.

Да ли да користим curl или wget за преузимање фајлова?

Оба су одлична. wget је једноставнији за рекурзивно пресликавање веб сајтова и има уграђену логику поновних покушаја. curl подржава преко 25 протокола (не само HTTP/FTP), бољи је за API позиве и скриптовање, подржава више метода аутентификације и доступан је на практично сваком оперативном систему.

Како користити curl у bash скрипти за преузимање фајлова?

Користите curl -fsSL -o file URL: -f тихо пропада при HTTP грешкама (без сачуване странице грешке), -s тихи, -S приказује грешке чак и у тихом режиму, -L прати преусмеравања. Проверите излазни код: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.