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 ৫০টি পর্যন্ত রিডাইরেক্ট অনুসরণ করে; --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-কে 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 requests সমর্থন করতে হবে।

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 ২৫+ প্রোটোকল সমর্থন করে (শুধু 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