Πώς να κατεβάσετε αρχεία με curl

Το curl είναι ένα από τα πιο ευέλικτα εργαλεία γραμμής εντολών για λήψη αρχείων μέσω HTTP, HTTPS, FTP και δεκάδων άλλων πρωτοκόλλων. Είτε χρειάζεται να αποθηκεύσετε μια απάντηση API σε αρχείο είτε να αυτοματοποιήσετε μαζικές λήψεις σε ένα shell script, το curl έχει ένα flag για αυτό. Αυτός ο οδηγός καλύπτει όλες τις επιλογές λήψης — από τη βασική αποθήκευση αρχείων με -o και -O έως τη συνέχιση διακοπτόμενων μεταφορών με -C -, τον περιορισμό εύρους ζώνης με --limit-rate και την εμφάνιση μπάρας προόδου. Κάθε flag περιλαμβάνει σαφή εξήγηση, συνήθη μοτίβα χρήσης και ένα έτοιμο προς αντιγραφή παράδειγμα.

Γρήγορη αναφορά flags λήψης

-o

Εγγραφή εξόδου σε ονομασμένο αρχείο αντί για stdout

-O

Εγγραφή εξόδου σε αρχείο με το όνομα του απομακρυσμένου αρχείου

-L

Αυτόματη ακολούθηση HTTP 3xx ανακατευθύνσεων

-C -

Συνέχιση/επανάληψη μιας προηγούμενης μεταφοράς αρχείου

--limit-rate

Περιορισμός ταχύτητας μεταφοράς στο καθορισμένο ρυθμό

--max-filesize

Απόρριψη λήψης αρχείων μεγαλύτερων από το καθορισμένο μέγεθος

-J

Χρήση του header Content-Disposition για ονομασία του αρχείου

-#

Εμφάνιση προόδου μεταφοράς ως απλή μπάρα προόδου

-u

Καθορισμός ονόματος χρήστη:κωδικού για αυθεντικοποίηση server

--retry

Επανάληψη μεταφοράς σε προσωρινά σφάλματα (αριθμός φορών)

--retry-delay

Αναμονή τόσων δευτερολέπτων μεταξύ επαναλήψεων

-T

Μεταφόρτωση τοπικού αρχείου σε URL (PUT εξ ορισμού)

--create-dirs

Δημιουργία τοπικών καταλόγων κατά ανάγκη κατά την αποθήκευση εξόδου

-s

Καταστολή μετρητή προόδου και μηνυμάτων σφάλματος

--output-dir

Αποθήκευση αρχείου(ων) εξόδου στον καθορισμένο κατάλογο (curl 7.73+)

curl -o: Αποθήκευση με συγκεκριμένο όνομα αρχείου

Τι κάνει
Το flag -o--output) λέει στο curl να αποθηκεύσει το σώμα απόκρισης σε ένα αρχείο που καθορίζετε. Χωρίς αυτό, το curl εκτυπώνει την απόκριση στο stdout (τερματικό σας). Μπορείτε να χρησιμοποιήσετε οποιοδήποτε όνομα αρχείου και διαδρομή — το curl δημιουργεί το αρχείο ή αντικαθιστά ένα υπάρχον.
Τυπική χρήση
Χρησιμοποιήστε -o όταν χρειάζεται να ελέγξετε το ακριβές όνομα αρχείου ή να αποθηκεύσετε σε συγκεκριμένο κατάλογο. Λειτουργεί με όλα τα πρωτόκολλα — HTTP, HTTPS, FTP, SFTP και άλλα. Συνδυάστε με -L για ανακατευθύνσεις και -s για σιωπηλή λειτουργία σε scripts.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -O: Αποθήκευση με το όνομα του απομακρυσμένου αρχείου

Τι κάνει
Το flag -O--remote-name) αποθηκεύει το ληφθέν αρχείο με το όνομα αρχείου που εξάγεται από τη διεύθυνση URL. Για παράδειγμα, αν η URL τελειώνει σε /data.csv, το curl δημιουργεί ένα αρχείο με το όνομα data.csv στον τρέχοντα κατάλογο.
Τυπική χρήση
Χρησιμοποιήστε -O όταν το όνομα του απομακρυσμένου αρχείου είναι κατάλληλο και δεν χρειάζεται να το μετονομάσετε. Μπορείτε να δώσετε πολλαπλά flags -O για λήψη πολλαπλών αρχείων με μία εντολή. Σημείωση: αν η URL δεν περιέχει όνομα αρχείου (π.χ. τελειώνει σε /), το curl αποτυγχάνει — χρησιμοποιήστε -o αντί αυτού.
$ curl -O https://example.com/files/data.csv

curl -L: Ακολούθηση ανακατευθύνσεων

Τι κάνει
Το flag -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 -: Συνέχιση διακοπτόμενων λήψεων

Τι κάνει
Το flag -C ---continue-at -) λέει στο curl να ανιχνεύσει αυτόματα το μέγεθος του υπάρχοντος μερικού αρχείου και να συνεχίσει τη λήψη από εκεί που σταμάτησε. Ο server πρέπει να υποστηρίζει τον HTTP header Range για να λειτουργήσει αυτό.
Τυπική χρήση
Αν μια μεγάλη λήψη διακόπηκε λόγω προβλήματος δικτύου ή timeout, απλώς εκτελέστε ξανά την ίδια εντολή με προσθήκη -C -. Το curl στέλνει έναν header Range: bytes=OFFSET- και κατεβάζει μόνο τα υπόλοιπα δεδομένα. Αυτό είναι ουσιαστικό για μεγάλα αρχεία σε αναξιόπιστες συνδέσεις.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate: Περιορισμός ταχύτητας λήψης

Τι κάνει
Το flag --limit-rate θέτει ανώτατο όριο στην ταχύτητα λήψης (και μεταφόρτωσης) στο καθορισμένο ρυθμό. Δέχεται επιθήματα: k ή K για kilobytes/s, m ή M για megabytes/s, g ή G για gigabytes/s.
Τυπική χρήση
Χρησιμοποιήστε --limit-rate για να αποφύγετε τον κορεσμό του εύρους ζώνης σας κατά τη λήψη μεγάλων αρχείων, ειδικά σε κοινόχρηστες συνδέσεις. Είναι επίσης χρήσιμο για δοκιμή του πώς η εφαρμογή σας χειρίζεται αργές απαντήσεις.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize: Ακύρωση αν το αρχείο είναι πολύ μεγάλο

Τι κάνει
Το flag --max-filesize λέει στο curl να ακυρώσει τη μεταφορά αν το αναμενόμενο μέγεθος αρχείου (από τον header Content-Length) υπερβαίνει το καθορισμένο όριο. Το μέγεθος μπορεί να χρησιμοποιεί επιθήματα όπως k, M, G.
Τυπική χρήση
Χρησιμοποιήστε σε scripts για να αποτρέψετε απρόσμενα μεγάλες λήψεις από το να καταναλώσουν χώρο στο δίσκο. Σημειώστε ότι δεν στέλνουν όλοι οι servers Content-Length — σε αυτή την περίπτωση, το curl δεν μπορεί να επιβάλει αυτό το όριο και η λήψη συνεχίζεται κανονικά.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J: Χρήση του ονόματος αρχείου που προτείνει ο server

Τι κάνει
Το flag -J--remote-header-name) λέει στο curl να χρησιμοποιήσει το όνομα αρχείου που καθορίζεται στον header Content-Disposition του server αντί να το εξαγάγει από τη URL. Αυτό είναι συνηθισμένο σε APIs λήψης που επιστρέφουν αρχεία με ουσιαστικά ονόματα.
Τυπική χρήση
Συνδυάζετε πάντα -J με -O. Αυτό είναι χρήσιμο όταν η URL είναι ένα API endpoint (όπως /export?format=csv) αλλά ο server επιστρέφει ένα σωστό όνομα αρχείου στους headers. Σημείωση ασφαλείας: ο server ελέγχει το όνομα αρχείου — χρησιμοποιήστε αυτό μόνο με αξιόπιστους servers.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -#: Εμφάνιση μπάρας προόδου

Τι κάνει
Το flag -#--progress-bar) αντικαθιστά τον λεπτομερή προεπιλεγμένο μετρητή προόδου με μια απλή μπάρα προόδου ###. Είναι πιο εύκολη στην ανάγνωση κατά τη διαδραστική χρήση.
Τυπική χρήση
Χρησιμοποιήστε -# κατά τη διαδραστική λήψη όταν θέλετε έναν καθαρό δείκτη προόδου. Για scripts, προτιμήστε -s (σιωπηλό) ή τον προεπιλεγμένο μετρητή προόδου. Η προεπιλεγμένη έξοδος του curl εμφανίζει ήδη ταχύτητα, ποσοστό, υπολειπόμενο χρόνο και συνολικό μέγεθος.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

Πρόσθετες επιλογές λήψης

-u

Καθορισμός ονόματος χρήστη:κωδικού για αυθεντικοποίηση server

--retry

Επανάληψη μεταφοράς σε προσωρινά σφάλματα (αριθμός φορών)

--retry-delay

Αναμονή τόσων δευτερολέπτων μεταξύ επαναλήψεων

-T

Μεταφόρτωση τοπικού αρχείου σε URL (PUT εξ ορισμού)

--create-dirs

Δημιουργία τοπικών καταλόγων κατά ανάγκη κατά την αποθήκευση εξόδου

-s

Καταστολή μετρητή προόδου και μηνυμάτων σφάλματος

--output-dir

Αποθήκευση αρχείου(ων) εξόδου στον καθορισμένο κατάλογο (curl 7.73+)

Σενάρια λήψης πραγματικών συνθηκών

Αυτά τα παραδείγματα συνδυάζουν πολλαπλά flags για τη διαχείριση συνήθων εργασιών λήψης που θα συναντήσετε στην καθημερινή ανάπτυξη και scripting.

Λήψη πολλαπλών αρχείων ταυτόχρονα

Χρησιμοποιήστε πολλαπλά flags -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 server

Το 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 token ή κλειδιού 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. Το flag -C - ανιχνεύει το μέγεθος του υπάρχοντος αρχείου και στέλνει έναν header Range για να ζητήσει μόνο τα υπόλοιπα bytes. Ο server πρέπει να υποστηρίζει 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 να κατεβάσει πολλαπλά αρχεία ταυτόχρονα;

Ναι. Χρησιμοποιήστε πολλαπλά flags -O: curl -O URL1 -O URL2 -O URL3. Το curl τα κατεβάζει σειριακά. Για παράλληλες λήψεις, περάστε μια λίστα URLs σε xargs -P 4 -I {} curl -O {}.

Πώς κατεβάζω ένα αρχείο που απαιτεί αυθεντικοποίηση;

Για HTTP Basic Auth: curl -u user:pass -o file URL. Για Bearer tokens: curl -H "Authorization: Bearer TOKEN" -o file URL. Για κλειδιά API σε headers: curl -H "X-API-Key: KEY" -o file URL.

Πώς κατεβάζω αρχεία από FTP server με 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 εμφανίζει ήδη ταχύτητα μεταφοράς, ποσοστό και εκτιμώμενο χρόνο. Για scripts, χρησιμοποιήστε -s για καταστολή κάθε εξόδου.

Μπορώ να καθορίσω κατάλογο λήψης στο curl;

Από curl 7.73+, χρησιμοποιήστε --output-dir /path/to/dir σε συνδυασμό με -O. Για παλαιότερες εκδόσεις, καθορίστε την πλήρη διαδρομή με -o /path/to/dir/filename. Προσθέστε --create-dirs αν ο κατάλογος δεν υπάρχει ακόμα.

Πρέπει να χρησιμοποιήσω curl ή wget για λήψη αρχείων;

Και τα δύο είναι εξαιρετικά. Το wget είναι απλούστερο για αναδρομικό mirroring ιστοσελίδων και έχει ενσωματωμένη λογική επανάληψης. Το curl υποστηρίζει 25+ πρωτόκολλα (όχι μόνο HTTP/FTP), είναι καλύτερο για κλήσεις API και scripting, υποστηρίζει περισσότερες μεθόδους αυθεντικοποίησης και είναι διαθέσιμο σε σχεδόν κάθε λειτουργικό σύστημα.

Πώς χρησιμοποιώ curl σε bash script για λήψη αρχείων;

Χρησιμοποιήστε curl -fsSL -o file URL: -f αποτυγχάνει σιωπηλά σε HTTP σφάλματα (καμία σελίδα σφάλματος δεν αποθηκεύεται), -s σιωπηλό, -S εμφάνιση σφαλμάτων ακόμα και σε σιωπηλή λειτουργία, -L ακολούθηση ανακατευθύνσεων. Ελέγξτε τον κωδικό εξόδου: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.