როგორ ჩამოტვირთოთ ფაილები 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

სერვერის ავთენტიფიკაციისთვის username:password-ის მიწოდება

--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 ბოლო წერტილი (როგორიცაა /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

სერვერის ავთენტიფიკაციისთვის username:password-ის მიწოდება

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

ავთენტიფიკაციით ჩამოტვირთვა

Basic Auth-ისთვის გამოიყენეთ -u user:pass, ან -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 ჰედერს მხოლოდ დარჩენილი ბაიტების მოსათხოვად. სერვერს უნდა ჰქონდეს range მოთხოვნების მხარდაჭერა.

როგორ შევზღუდო ჩამოტვირთვის სიჩქარე curl-ში?

გამოიყენეთ --limit-rate მნიშვნელობითა და სუფიქსით: curl --limit-rate 500k -o file URL სიჩქარეს ზღუდავს 500 KB/წმ-მდე. სუფიქსები: k (KB/წმ), M (MB/წმ), G (GB/წმ).

შეუძლია 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 over 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.