curl से फ़ाइलें कैसे डाउनलोड करें

curl HTTP, HTTPS, FTP और दर्जनों अन्य प्रोटोकॉल पर फ़ाइलें डाउनलोड करने के लिए सबसे बहुमुखी कमांड-लाइन टूल में से एक है। चाहे आपको एक API रिस्पॉन्स को फ़ाइल में सेव करना हो या शेल स्क्रिप्ट में बैच डाउनलोड को ऑटोमेट करना हो, 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 हेडर सपोर्ट करना होगा।
सामान्य उपयोग
अगर कोई बड़ा डाउनलोड नेटवर्क समस्या या timeout के कारण बाधित हो गया, तो बस -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 को बताता है कि URL से निकालने की बजाय सर्वर के Content-Disposition हेडर में निर्दिष्ट फ़ाइलनाम का उपयोग करे। यह डाउनलोड 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, या Bearer टोकन या API कुंजी पास करने के लिए -H का उपयोग करें। संपूर्ण डाउनलोड के लिए -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/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

curl से FTP सर्वर से फ़ाइलें कैसे डाउनलोड करें?

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 कॉल और स्क्रिप्टिंग के लिए बेहतर है, अधिक प्रमाणीकरण विधियों को सपोर्ट करता है और लगभग हर ऑपरेटिंग सिस्टम पर उपलब्ध है।

bash स्क्रिप्ट में curl से फ़ाइलें कैसे डाउनलोड करें?

curl -fsSL -o file URL का उपयोग करें: -f HTTP एरर पर चुपचाप फ़ेल होता है (एरर पेज सेव नहीं होता), -s साइलेंट, -S साइलेंट मोड में भी एरर दिखाएँ, -L रीडायरेक्ट फ़ॉलो करें। एग्ज़िट कोड जाँचें: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi