כיצד להוריד קבצים עם curl

curl הוא אחד הכלים הרב-תכליתיים ביותר בשורת הפקודה להורדת קבצים דרך HTTP, HTTPS, FTP ועשרות פרוטוקולים נוספים. בין אם אתם צריכים לשמור תגובת API בודדת לקובץ או לבצע אוטומציה של הורדות באצווה בסקריפט shell, ל-curl יש דגל לכך. מדריך זה מכסה כל אפשרות הקשורה להורדה — משמירה בסיסית לקובץ עם -o ו--O ועד המשך העברות שנקטעו עם -C -, הגבלת רוחב פס עם --limit-rate והצגת סרגלי התקדמות. כל דגל כולל הסבר ברור, דפוסי שימוש נפוצים ודוגמה מוכנה להעתקה.

מדריך מהיר לדגלי הורדה

-o

כתיבת פלט לקובץ בעל שם במקום stdout

-O

כתיבת פלט לקובץ בשם הקובץ המרוחק

-L

מעקב אוטומטי אחר הפניות HTTP 3xx

-C -

המשך/חידוש העברת קובץ קודמת

--limit-rate

הגבלת מהירות ההעברה לקצב נתון

--max-filesize

סירוב להוריד קבצים הגדולים מהגודל המצוין

-J

שימוש בכותרת Content-Disposition לשם הקובץ

-#

הצגת התקדמות ההעברה כסרגל התקדמות פשוט

-u

ספקו שם_משתמש:סיסמה לאימות שרת

--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 מחזיר את תגובת ההפניה עצמה במקום התוכן בפועל.
שימוש נפוץ
רוב כתובות ההורדה מפנות לפחות פעם אחת (למשל, מ-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 להשתמש בשם הקובץ המצוין בכותרת Content-Disposition של השרת במקום לגזור אותו מה-URL. זה נפוץ ב-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

ספקו שם_משתמש:סיסמה לאימות שרת

--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

הורדה עם אימות

השתמשו ב--u user:pass ל-Basic Auth, או -H להעברת טוקן Bearer או מפתח 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. הדגל -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.

כיצד אני מוריד קבצים משרת FTP עם curl?

השתמשו ב-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 וסקריפטים, תומך בשיטות אימות נוספות וזמין כמעט בכל מערכת הפעלה.

כיצד אני משתמש ב-curl בסקריפט bash להורדת קבצים?

השתמשו ב-curl -fsSL -o file URL: -f נכשל בשקט בשגיאות HTTP (ללא שמירת דף שגיאה), -s שקט, -S הצגת שגיאות גם במצב שקט, -L מעקב אחר הפניות. בדקו את קוד היציאה: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.