curl ile Dosya İndirme

curl, HTTP, HTTPS, FTP ve düzinelerce başka protokol üzerinden dosya indirmek için en çok yönlü komut satırı araçlarından biridir. Tek bir API yanıtını dosyaya kaydetmeniz veya bir shell betiğinde toplu indirmeleri otomatikleştirmeniz gereksin — curl bunun için bir bayrağa sahiptir. Bu rehber, indirme ile ilgili tüm seçenekleri kapsar — -o ve -O ile temel dosya kaydetmeden, -C - ile yarıda kalan transferleri sürdürmeye, --limit-rate ile bant genişliğini kısıtlamaya ve ilerleme çubuğu göstermeye kadar. Her bayrak için net bir açıklama, yaygın kullanım kalıpları ve kopyalamaya hazır bir örnek bulunmaktadır.

İndirme Bayrakları Hızlı Referans

-o

Çıktıyı stdout yerine belirtilen dosyaya yaz

-O

Çıktıyı uzak dosya ile aynı adda bir dosyaya yaz

-L

HTTP 3xx yönlendirmelerini otomatik takip et

-C -

Önceki dosya transferini devam ettir/sürdür

--limit-rate

Transfer hızını belirtilen değerle sınırla

--max-filesize

Belirtilen boyuttan büyük dosyaları indirmeyi reddet

-J

Dosyayı adlandırmak için Content-Disposition başlığını kullan

-#

Transfer ilerlemesini basit bir ilerleme çubuğu olarak göster

-u

Sunucu kimlik doğrulaması için kullanıcıadı:parola sağla

--retry

Geçici hatalarda transferi yeniden dene (tekrar sayısı)

--retry-delay

Yeniden denemeler arasında bu kadar saniye bekle

-T

Yerel dosyayı bir URL'ye yükle (varsayılan olarak PUT)

--create-dirs

Çıktıyı kaydederken gerektiğinde yerel dizinler oluştur

-s

İlerleme göstergesi ve hata mesajlarını bastır

--output-dir

Çıktı dosya(lar)ını belirtilen dizine kaydet (curl 7.73+)

curl -o: Belirli Bir Dosya Adıyla Kaydet

Ne yapar
-o (veya --output) bayrağı, curl'a yanıt gövdesini belirttiğiniz bir dosyaya kaydetmesini söyler. Bu bayrak olmadan curl yanıtı stdout'a (terminalinize) yazdırır. Herhangi bir dosya adı ve yol kullanabilirsiniz — curl dosyayı oluşturur veya mevcut olanın üzerine yazar.
Yaygın kullanım
Tam dosya adını kontrol etmeniz veya belirli bir dizine kaydetmeniz gerektiğinde -o kullanın. HTTP, HTTPS, FTP, SFTP ve daha fazlası dahil her protokolle çalışır. Yönlendirmeleri işlemek için -L ile, betiklerde sessiz çalışma için -s ile birleştirin.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -O: Uzak Dosya Adıyla Kaydet

Ne yapar
-O (veya --remote-name) bayrağı, indirilen dosyayı URL'den çıkarılan dosya adıyla kaydeder. Örneğin URL /data.csv ile bitiyorsa, curl mevcut dizinde data.csv adlı bir dosya oluşturur.
Yaygın kullanım
Uzak dosya adı anlamlı olduğunda ve yeniden adlandırmanıza gerek olmadığında -O kullanın. Tek komutla birden fazla dosya indirmek için birden fazla -O bayrağı geçirebilirsiniz. Not: URL bir dosya adı içermiyorsa (örneğin / ile bitiyorsa), curl başarısız olur — bunun yerine -o kullanın.
$ curl -O https://example.com/files/data.csv

curl -L: Yönlendirmeleri Takip Et

Ne yapar
-L (veya --location) bayrağı, curl'un HTTP yönlendirmelerini otomatik takip etmesini sağlar — 301 (Kalıcı Taşınma), 302 (Bulundu), 307 ve 308. -L olmadan curl, gerçek içerik yerine yönlendirme yanıtının kendisini döndürür.
Yaygın kullanım
Çoğu indirme URL'si en az bir kez yönlendirir (örneğin HTTP'den HTTPS'ye veya kısa URL'den gerçek dosyaya). Dosya indirirken her zaman -L ile -o veya -O birleştirin. Varsayılan olarak curl 50 yönlendirmeye kadar takip eder; bunu --max-redirs ile değiştirin.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gz

curl -C -: Yarıda Kalan İndirmeleri Sürdür

Ne yapar
-C - (veya --continue-at -) bayrağı, curl'a mevcut kısmi dosyanın boyutunu otomatik algılamasını ve indirmeyi kaldığı yerden sürdürmesini söyler. Bunun çalışması için sunucunun HTTP Range başlığını desteklemesi gerekir.
Yaygın kullanım
Büyük bir indirme ağ sorunu veya zaman aşımı nedeniyle kesintiye uğradıysa, aynı komutu -C - ekleyerek yeniden çalıştırın. curl bir Range: bytes=OFFSET- başlığı gönderir ve yalnızca kalan verileri indirir. Bu, güvenilir olmayan bağlantılar üzerindeki büyük dosyalar için vazgeçilmezdir.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate: İndirme Hızını Kısıtla

Ne yapar
--limit-rate bayrağı, indirme (ve yükleme) hızını belirtilen değerle sınırlar. Son ekler kabul eder: kilobayt/s için k veya K, megabayt/s için m veya M, gigabayt/s için g veya G.
Yaygın kullanım
Büyük dosyalar indirirken, özellikle paylaşımlı bağlantılarda bant genişliğinizi doldurmamak için --limit-rate kullanın. Uygulamanızın yavaş yanıtları nasıl işlediğini test etmek için de faydalıdır.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize: Dosya Çok Büyükse İptal Et

Ne yapar
--max-filesize bayrağı, beklenen dosya boyutu (Content-Length başlığından) belirtilen sınırı aşarsa curl'a transferi iptal etmesini söyler. Boyut k, M, G gibi son ekler kullanabilir.
Yaygın kullanım
Betiklerde beklenmedik büyüklükteki indirmelerin disk alanını tüketmesini önlemek için kullanın. Tüm sunucular Content-Length göndermez — bu durumda curl bu sınırı uygulayamaz ve indirme normal devam eder.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J: Sunucunun Önerdiği Dosya Adını Kullan

Ne yapar
-J (veya --remote-header-name) bayrağı, curl'a URL'den türetmek yerine sunucunun Content-Disposition başlığında belirtilen dosya adını kullanmasını söyler. Bu, anlamlı adlarla dosya döndüren indirme API'lerinde yaygındır.
Yaygın kullanım
Her zaman -J ile -O birleştirin. URL bir API uç noktası olduğunda (/export?format=csv gibi) ancak sunucu başlıklarda uygun bir dosya adı döndürdüğünde faydalıdır. Güvenlik notu: dosya adını sunucu kontrol eder, bu nedenle yalnızca güvenilir sunucularla kullanın.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -#: İlerleme Çubuğu Göster

Ne yapar
-# (veya --progress-bar) bayrağı, varsayılan ayrıntılı ilerleme göstergesini basit bir ### ilerleme çubuğuyla değiştirir. Etkileşimli kullanım için okunması daha kolaydır.
Yaygın kullanım
Etkileşimli indirme yaparken ve temiz bir ilerleme göstergesi istediğinizde -# kullanın. Betikler için -s (sessiz) veya varsayılan ilerleme göstergesini tercih edin. Varsayılan curl çıktısı zaten hız, yüzde, kalan süre ve toplam boyutu gösterir.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

Ek İndirme Seçenekleri

-u

Sunucu kimlik doğrulaması için kullanıcıadı:parola sağla

--retry

Geçici hatalarda transferi yeniden dene (tekrar sayısı)

--retry-delay

Yeniden denemeler arasında bu kadar saniye bekle

-T

Yerel dosyayı bir URL'ye yükle (varsayılan olarak PUT)

--create-dirs

Çıktıyı kaydederken gerektiğinde yerel dizinler oluştur

-s

İlerleme göstergesi ve hata mesajlarını bastır

--output-dir

Çıktı dosya(lar)ını belirtilen dizine kaydet (curl 7.73+)

Gerçek Dünya İndirme Senaryoları

Bu örnekler, günlük geliştirme ve betik yazımında karşılaşacağınız yaygın indirme görevlerini ele almak için birden fazla bayrağı birleştirir.

Birden Fazla Dosyayı Aynı Anda İndir

Tek komutla birden fazla dosya indirmek için birden fazla -O bayrağı kullanın. curl bunları sırayla işler. Paralel indirmeler için xargs veya GNU parallel kullanın.

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

FTP Sunucusundan İndirme

curl, FTP, FTPS ve SFTP'yi yerel olarak destekler. Kimlik doğrulamalı erişim için -u user:password ekleyin. Uzak dosya adını korumak için -O kullanın.

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

Kimlik Doğrulamalı İndirme

Basic Auth için -u user:pass veya Bearer token ya da API anahtarı göndermek için -H kullanın. Tam bir indirme için -L ve -o ile birleştirin.

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

Sürdürme ve Yeniden Deneme ile Güvenilir İndirme

Ağ kesintilerine dayanıklı güçlü indirmeler için -C - (sürdürme), --retry (hatada otomatik yeniden deneme) ve -L (yönlendirmeleri takip) birleştirin.

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

curl ile İndirme Hakkında Sık Sorulan Sorular

curl -o ve curl -O arasındaki fark nedir?

-o filename indirmeyi belirttiğiniz tam dosya adına kaydeder. -O dosya adını URL'den çıkarır ve onu kullanır. Özel bir ad veya yol istediğinizde -o kullanın; uzak dosya adı uygunsa -O kullanın.

curl neden gerçek dosya yerine boş veya HTML dosyası indiriyor?

URL muhtemelen bir HTTP yönlendirmesi (301 veya 302) döndürüyor. Varsayılan olarak curl, son içerik yerine yönlendirme yanıtının kendisini kaydeder. Yönlendirmeleri otomatik takip etmek için -L ekleyin: curl -L -o dosya URL.

curl ile kısmen indirilmiş bir dosyayı nasıl sürdürebilirim?

curl -C - -o filename URL kullanın. -C - bayrağı mevcut dosya boyutunu algılar ve yalnızca kalan baytları istemek için bir Range başlığı gönderir. Bunun çalışması için sunucunun range isteklerini desteklemesi gerekir.

curl'da indirme hızını nasıl sınırlarım?

--limit-rate ile bir değer ve son ek kullanın: curl --limit-rate 500k -o dosya URL hızı 500 KB/s ile sınırlar. Son ekler: k (KB/s), M (MB/s), G (GB/s).

curl aynı anda birden fazla dosya indirebilir mi?

Evet. Birden fazla -O bayrağı kullanın: curl -O URL1 -O URL2 -O URL3. curl bunları sırayla indirir. Paralel indirmeler için URL listesini xargs -P 4 -I {} curl -O {} ile yönlendirin.

Kimlik doğrulaması gerektiren bir dosyayı nasıl indiririm?

HTTP Basic Auth için: curl -u user:pass -o dosya URL. Bearer token'lar için: curl -H "Authorization: Bearer TOKEN" -o dosya URL. Başlıklardaki API anahtarları için: curl -H "X-API-Key: KEY" -o dosya URL.

curl ile FTP sunucusundan dosya nasıl indirilir?

curl -u user:pass -o yereldosya ftp://host/yol/dosya kullanın. curl, FTP, FTPS (TLS üzerinden FTP) ve SFTP (SSH FTP) protokollerini yerel olarak destekler. Anonim FTP için -u parametresini atlayın.

Büyük dosyaları curl ile güvenilir şekilde nasıl indiririm?

-C - (hatada sürdürme), --retry 5 (otomatik yeniden deneme), --retry-delay 10 ve -L (yönlendirmeleri takip) birleştirin: curl -C - --retry 5 --retry-delay 10 -L -o dosya URL. Bu, ağ kesintilerini otomatik olarak yönetir.

curl ile indirirken ilerleme çubuğunu nasıl gösteririm?

Basit bir ilerleme çubuğu için curl -# -o dosya URL kullanın. Varsayılan curl çıktısı zaten transfer hızı, yüzde ve tahmini süreyi gösterir. Betikler için tüm çıktıyı bastırmak üzere -s kullanın.

curl'da indirme dizini belirleyebilir miyim?

curl 7.73+ ile --output-dir /yol/dizin ve -O birleştirin. Eski sürümler için -o /path/to/dir/filename ile tam yolu belirtin. Dizin henüz yoksa --create-dirs ekleyin.

Dosya indirmek için curl mu yoksa wget mi kullanmalıyım?

İkisi de mükemmeldir. wget özyinelemeli web sitesi yansılama için daha basittir ve yerleşik yeniden deneme mantığına sahiptir. curl 25'ten fazla protokolü destekler (sadece HTTP/FTP değil), API çağrıları ve betik yazımı için daha iyidir, daha fazla kimlik doğrulama yöntemi destekler ve neredeyse her işletim sisteminde mevcuttur.

Dosya indirmek için bash betiğinde curl'u nasıl kullanırım?

curl -fsSL -o dosya URL kullanın: -f HTTP hatalarında sessizce başarısız olur (hata sayfası kaydedilmez), -s sessiz, -S sessiz modda bile hataları gösterir, -L yönlendirmeleri takip eder. Çıkış kodunu kontrol edin: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.