כיצד להוריד קבצים עם curl
curl הוא אחד הכלים הרב-תכליתיים ביותר בשורת הפקודה להורדת קבצים דרך HTTP, HTTPS, FTP ועשרות פרוטוקולים נוספים. בין אם אתם צריכים לשמור תגובת API בודדת לקובץ או לבצע אוטומציה של הורדות באצווה בסקריפט shell, ל-curl יש דגל לכך. מדריך זה מכסה כל אפשרות הקשורה להורדה — משמירה בסיסית לקובץ עם -o ו--O ועד המשך העברות שנקטעו עם -C -, הגבלת רוחב פס עם --limit-rate והצגת סרגלי התקדמות. כל דגל כולל הסבר ברור, דפוסי שימוש נפוצים ודוגמה מוכנה להעתקה.
מדריך מהיר לדגלי הורדה
כתיבת פלט לקובץ בעל שם במקום stdout
כתיבת פלט לקובץ בשם הקובץ המרוחק
מעקב אוטומטי אחר הפניות HTTP 3xx
המשך/חידוש העברת קובץ קודמת
הגבלת מהירות ההעברה לקצב נתון
סירוב להוריד קבצים הגדולים מהגודל המצוין
שימוש בכותרת Content-Disposition לשם הקובץ
הצגת התקדמות ההעברה כסרגל התקדמות פשוט
ספקו שם_משתמש:סיסמה לאימות שרת
נסו מחדש את ההעברה בשגיאות זמניות (מספר פעמים)
המתינו מספר שניות זה בין ניסיונות חוזרים
העלו קובץ מקומי ל-URL (PUT כברירת מחדל)
צרו תיקיות מקומיות לפי הצורך בעת שמירת פלט
דכאו מד התקדמות והודעות שגיאה
שמרו קובץ/י פלט בתיקייה המצוינת (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.pdfcurl -O: שמירה עם שם הקובץ המרוחק
- מה זה עושה
- הדגל
-O(או--remote-name) שומר את הקובץ שהורד בשם המופק מה-URL. לדוגמה, אם ה-URL מסתיים ב-/data.csv, curl יוצר קובץ בשםdata.csvבתיקייה הנוכחית. - שימוש נפוץ
- השתמשו ב-
-Oכששם הקובץ המרוחק משמעותי ואינכם צריכים לשנות את שמו. ניתן להעביר מספר דגלי-Oלהורדת מספר קבצים בפקודה אחת. שימו לב: אם ה-URL אינו מכיל שם קובץ (למשל, מסתיים ב-/), curl ייכשל — השתמשו ב--oבמקום.
$ curl -O https://example.com/files/data.csvcurl -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.gzcurl -C -: המשך הורדות שנקטעו
- מה זה עושה
- הדגל
-C -(או--continue-at -) מורה ל-curl לזהות אוטומטית את גודל הקובץ החלקי הקיים ולהמשיך את ההורדה מהמקום שבו הופסקה. השרת חייב לתמוך בכותרת HTTPRangeכדי שזה יעבוד. - שימוש נפוץ
- אם הורדה גדולה נקטעה בשל בעיית רשת או timeout, פשוט הריצו מחדש את אותה פקודה עם הוספת
-C -. curl ישלח כותרתRange: bytes=OFFSET-ויוריד רק את הנתונים הנותרים. זה חיוני לקבצים גדולים על חיבורים לא יציבים.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: הגבלת מהירות ההורדה
- מה זה עושה
- הדגל
--limit-rateמגביל את מהירות ההורדה (וההעלאה) לקצב המצוין. מקבל סיומות:kאוKלקילובייט/שנייה,mאוMלמגבייט/שנייה,gאוGלגיגבייט/שנייה. - שימוש נפוץ
- השתמשו ב-
--limit-rateכדי להימנע מהצפת רוחב הפס בעת הורדת קבצים גדולים, במיוחד על חיבורים משותפים. שימושי גם לבדיקת אופן הטיפול של האפליקציה בתגובות איטיות.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: ביטול אם הקובץ גדול מדי
- מה זה עושה
- הדגל
--max-filesizeמורה ל-curl לבטל את ההעברה אם גודל הקובץ הצפוי (מכותרתContent-Length) חורג מהמגבלה המצוינת. הגודל יכול להשתמש בסיומות כמוk,M,G. - שימוש נפוץ
- השתמשו בסקריפטים כדי למנוע הורדות גדולות באופן בלתי צפוי מלצרוך שטח דיסק. שימו לב שלא כל השרתים שולחים
Content-Length— במקרה זה, curl לא יכול לאכוף מגבלה זו וההורדה ממשיכה כרגיל.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -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=csvcurl -#: הצגת סרגל התקדמות
- מה זה עושה
- הדגל
-#(או--progress-bar) מחליף את מד ההתקדמות המפורט כברירת מחדל בסרגל התקדמות פשוט###. זה קל יותר לקריאה לשימוש אינטראקטיבי. - שימוש נפוץ
- השתמשו ב-
-#בעת הורדה אינטראקטיבית כשאתם רוצים מחוון התקדמות נקי. לסקריפטים, העדיפו-s(שקט) או מד ההתקדמות כברירת מחדל. הפלט כברירת מחדל של curl כבר מציג מהירות, אחוזים, זמן נותר וגודל כולל.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzאפשרויות הורדה נוספות
ספקו שם_משתמש:סיסמה לאימות שרת
נסו מחדש את ההעברה בשגיאות זמניות (מספר פעמים)
המתינו מספר שניות זה בין ניסיונות חוזרים
העלו קובץ מקומי ל-URL (PUT כברירת מחדל)
צרו תיקיות מקומיות לפי הצורך בעת שמירת פלט
דכאו מד התקדמות והודעות שגיאה
שמרו קובץ/י פלט בתיקייה המצוינת (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.