Πώς να κατεβάσετε αρχεία με curl
Το curl είναι ένα από τα πιο ευέλικτα εργαλεία γραμμής εντολών για λήψη αρχείων μέσω HTTP, HTTPS, FTP και δεκάδων άλλων πρωτοκόλλων. Είτε χρειάζεται να αποθηκεύσετε μια απάντηση API σε αρχείο είτε να αυτοματοποιήσετε μαζικές λήψεις σε ένα shell script, το curl έχει ένα flag για αυτό. Αυτός ο οδηγός καλύπτει όλες τις επιλογές λήψης — από τη βασική αποθήκευση αρχείων με -o και -O έως τη συνέχιση διακοπτόμενων μεταφορών με -C -, τον περιορισμό εύρους ζώνης με --limit-rate και την εμφάνιση μπάρας προόδου. Κάθε flag περιλαμβάνει σαφή εξήγηση, συνήθη μοτίβα χρήσης και ένα έτοιμο προς αντιγραφή παράδειγμα.
Γρήγορη αναφορά flags λήψης
Εγγραφή εξόδου σε ονομασμένο αρχείο αντί για stdout
Εγγραφή εξόδου σε αρχείο με το όνομα του απομακρυσμένου αρχείου
Αυτόματη ακολούθηση HTTP 3xx ανακατευθύνσεων
Συνέχιση/επανάληψη μιας προηγούμενης μεταφοράς αρχείου
Περιορισμός ταχύτητας μεταφοράς στο καθορισμένο ρυθμό
Απόρριψη λήψης αρχείων μεγαλύτερων από το καθορισμένο μέγεθος
Χρήση του header Content-Disposition για ονομασία του αρχείου
Εμφάνιση προόδου μεταφοράς ως απλή μπάρα προόδου
Καθορισμός ονόματος χρήστη:κωδικού για αυθεντικοποίηση server
Επανάληψη μεταφοράς σε προσωρινά σφάλματα (αριθμός φορών)
Αναμονή τόσων δευτερολέπτων μεταξύ επαναλήψεων
Μεταφόρτωση τοπικού αρχείου σε URL (PUT εξ ορισμού)
Δημιουργία τοπικών καταλόγων κατά ανάγκη κατά την αποθήκευση εξόδου
Καταστολή μετρητή προόδου και μηνυμάτων σφάλματος
Αποθήκευση αρχείου(ων) εξόδου στον καθορισμένο κατάλογο (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.pdfcurl -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.csvcurl -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.gzcurl -C -: Συνέχιση διακοπτόμενων λήψεων
- Τι κάνει
- Το flag
-C -(ή--continue-at -) λέει στο curl να ανιχνεύσει αυτόματα το μέγεθος του υπάρχοντος μερικού αρχείου και να συνεχίσει τη λήψη από εκεί που σταμάτησε. Ο server πρέπει να υποστηρίζει τον HTTP headerRangeγια να λειτουργήσει αυτό. - Τυπική χρήση
- Αν μια μεγάλη λήψη διακόπηκε λόγω προβλήματος δικτύου ή timeout, απλώς εκτελέστε ξανά την ίδια εντολή με προσθήκη
-C -. Το curl στέλνει έναν headerRange: bytes=OFFSET-και κατεβάζει μόνο τα υπόλοιπα δεδομένα. Αυτό είναι ουσιαστικό για μεγάλα αρχεία σε αναξιόπιστες συνδέσεις.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --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.isocurl --max-filesize: Ακύρωση αν το αρχείο είναι πολύ μεγάλο
- Τι κάνει
- Το flag
--max-filesizeλέει στο curl να ακυρώσει τη μεταφορά αν το αναμενόμενο μέγεθος αρχείου (από τον headerContent-Length) υπερβαίνει το καθορισμένο όριο. Το μέγεθος μπορεί να χρησιμοποιεί επιθήματα όπωςk,M,G. - Τυπική χρήση
- Χρησιμοποιήστε σε scripts για να αποτρέψετε απρόσμενα μεγάλες λήψεις από το να καταναλώσουν χώρο στο δίσκο. Σημειώστε ότι δεν στέλνουν όλοι οι servers
Content-Length— σε αυτή την περίπτωση, το curl δεν μπορεί να επιβάλει αυτό το όριο και η λήψη συνεχίζεται κανονικά.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Χρήση του ονόματος αρχείου που προτείνει ο server
- Τι κάνει
- Το flag
-J(ή--remote-header-name) λέει στο curl να χρησιμοποιήσει το όνομα αρχείου που καθορίζεται στον headerContent-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=csvcurl -#: Εμφάνιση μπάρας προόδου
- Τι κάνει
- Το flag
-#(ή--progress-bar) αντικαθιστά τον λεπτομερή προεπιλεγμένο μετρητή προόδου με μια απλή μπάρα προόδου###. Είναι πιο εύκολη στην ανάγνωση κατά τη διαδραστική χρήση. - Τυπική χρήση
- Χρησιμοποιήστε
-#κατά τη διαδραστική λήψη όταν θέλετε έναν καθαρό δείκτη προόδου. Για scripts, προτιμήστε-s(σιωπηλό) ή τον προεπιλεγμένο μετρητή προόδου. Η προεπιλεγμένη έξοδος του curl εμφανίζει ήδη ταχύτητα, ποσοστό, υπολειπόμενο χρόνο και συνολικό μέγεθος.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzΠρόσθετες επιλογές λήψης
Καθορισμός ονόματος χρήστη:κωδικού για αυθεντικοποίηση server
Επανάληψη μεταφοράς σε προσωρινά σφάλματα (αριθμός φορών)
Αναμονή τόσων δευτερολέπτων μεταξύ επαναλήψεων
Μεταφόρτωση τοπικού αρχείου σε URL (PUT εξ ορισμού)
Δημιουργία τοπικών καταλόγων κατά ανάγκη κατά την αποθήκευση εξόδου
Καταστολή μετρητή προόδου και μηνυμάτων σφάλματος
Αποθήκευση αρχείου(ων) εξόδου στον καθορισμένο κατάλογο (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.