Sådan downloader du filer med curl

curl er et af de mest alsidige kommandolinjeværktøjer til at downloade filer over HTTP, HTTPS, FTP og snesevis af andre protokoller. Uanset om du skal gemme et enkelt API-svar til en fil eller automatisere batch-downloads i et shell-script, har curl et flag til det. Denne guide dækker alle download-relaterede muligheder — fra grundlaeggende fillagring med -o og -O til genoptagelse af afbrudte overførsler med -C -, begrænsning af bandbredde med --limit-rate og visning af fremskridtsbjælker. Hvert flag inkluderer en klar forklaring, almindelige brugsmønstre og et kopierklart eksempel.

Hurtig reference for download-flag

-o

Skriv output til en navngivet fil i stedet for stdout

-O

Skriv output til en fil navngivet som fjernfilen

-L

Følg HTTP 3xx omdirigeringer automatisk

-C -

Fortsæt/genoptag en tidligere filoverførsel

--limit-rate

Begræns overførselshastigheden til den angivne rate

--max-filesize

Afvis at downloade filer større end den angivne størrelse

-J

Brug Content-Disposition headeren til at navngive filen

-#

Vis overførselsfremskridt som en simpel fremskridtsbjælke

-u

Angiv brugernavn:adgangskode til serverautentificering

--retry

Gentag overførslen ved midlertidige fejl (antal gange)

--retry-delay

Vent dette antal sekunder mellem gentagelser

-T

Upload en lokal fil til en URL (PUT som standard)

--create-dirs

Opret lokale mapper efter behov ved gemning af output

-s

Undertryk fremskridtsmåler og fejlbeskeder

--output-dir

Gem outputfil(er) i den angivne mappe (curl 7.73+)

curl -o: Gem med et bestemt filnavn

Hvad det gør
Flaget -o (eller --output) fortaeller curl at gemme svarteksten i en fil, du angiver. Uden det udskriver curl svaret til stdout (din terminal). Du kan bruge ethvert filnavn og sti — curl opretter filen eller overskriver en eksisterende.
Almindelig brug
Brug -o når du skal kontrollere det nøjagtige filnavn eller gemme i en bestemt mappe. Det virker med alle protokoller — HTTP, HTTPS, FTP, SFTP og flere. Kombiner med -L til at håndtere omdirigeringer og -s til lydløs drift i scripts.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -O: Gem med fjernfilens navn

Hvad det gør
Flaget -O (eller --remote-name) gemmer den downloadede fil med filnavnet udtrukket fra URL'en. For eksempel, hvis URL'en ender med /data.csv, opretter curl en fil kaldet data.csv i den aktuelle mappe.
Almindelig brug
Brug -O når fjernfilnavnet er meningsfuldt, og du ikke behøver at omdøbe det. Du kan sende flere -O flag for at downloade flere filer med en kommando. Bemærk: hvis URL'en ikke indeholder et filnavn (f.eks. ender med /), fejler curl — brug -o i stedet.
$ curl -O https://example.com/files/data.csv

curl -L: Følg omdirigeringer

Hvad det gør
Flaget -L (eller --location) får curl til automatisk at følge HTTP-omdirigeringer — 301 (Moved Permanently), 302 (Found), 307 og 308. Uden -L returnerer curl selve omdirigeringssvaret i stedet for det faktiske indhold.
Almindelig brug
De fleste download-URL'er omdirigerer mindst en gang (f.eks. fra HTTP til HTTPS eller fra en kort URL til den faktiske fil). Kombiner altid -L med -o eller -O ved download af filer. Som standard følger curl op til 50 omdirigeringer; ændr dette med --max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gz

curl -C -: Genoptag afbrudte downloads

Hvad det gør
Flaget -C - (eller --continue-at -) fortaeller curl at automatisk detektere størrelsen på den eksisterende delvise fil og genoptage downloaden derfra, hvor den stoppede. Serveren skal understoette HTTP Range-headeren for at dette virker.
Almindelig brug
Hvis en stor download blev afbrudt af et netværksproblem eller timeout, koer blot den samme kommando igen med -C - tilføjet. curl sender en Range: bytes=OFFSET- header og downloader kun de resterende data. Dette er essentielt for store filer over upålidelige forbindelser.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate: Begræns downloadhastighed

Hvad det gør
Flaget --limit-rate sætter et loft over download- (og upload-) hastigheden til den angivne rate. Det accepterer suffikser: k eller K for kilobytes/s, m eller M for megabytes/s, g eller G for gigabytes/s.
Almindelig brug
Brug --limit-rate for at undgå at mætte din båndbredde ved download af store filer, især på delte forbindelser. Det er ogsaa nyttigt til at teste, hvordan din applikation håndterer langsomme svar.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize: Afbryd hvis filen er for stor

Hvad det gør
Flaget --max-filesize fortaeller curl at afbryde overførslen, hvis den forventede filstørrelse (fra Content-Length headeren) overstiger den angivne grænse. Stoerrelsen kan bruge suffikser som k, M, G.
Almindelig brug
Brug i scripts for at forhindre uventet store downloads i at forbruge diskplads. Bemærk at ikke alle servere sender Content-Length — i saa fald kan curl ikke håndhæve denne grænse, og downloaden fortsætter normalt.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J: Brug serverforeslået filnavn

Hvad det gør
Flaget -J (eller --remote-header-name) fortaeller curl at bruge filnavnet angivet i serverens Content-Disposition header i stedet for at udlede det fra URL'en. Dette er almindeligt for download-API'er, der returnerer filer med meningsfulde navne.
Almindelig brug
Kombiner altid -J med -O. Dette er nyttigt, når URL'en er et API-endpoint (som /export?format=csv), men serveren returnerer et korrekt filnavn i headerne. Sikkerhedsnote: serveren kontrollerer filnavnet, saa brug kun med betroede servere.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -#: Vis en fremskridtsbjælke

Hvad det gør
Flaget -# (eller --progress-bar) erstatter den detaljerede standard-fremskridtsmåler med en simpel ### fremskridtsbjælke. Den er nemmere at læse ved interaktiv brug.
Almindelig brug
Brug -# ved interaktiv download, når du vil have en ren fremskridtsindikator. Til scripts foretrækkes -s (lydløs) eller standard-fremskridtsmåleren. Standard curl-output viser allerede hastighed, procent, resterende tid og total størrelse.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

Yderligere downloadmuligheder

-u

Angiv brugernavn:adgangskode til serverautentificering

--retry

Gentag overførslen ved midlertidige fejl (antal gange)

--retry-delay

Vent dette antal sekunder mellem gentagelser

-T

Upload en lokal fil til en URL (PUT som standard)

--create-dirs

Opret lokale mapper efter behov ved gemning af output

-s

Undertryk fremskridtsmåler og fejlbeskeder

--output-dir

Gem outputfil(er) i den angivne mappe (curl 7.73+)

Virkelige download-scenarier

Disse eksempler kombinerer flere flag for at håndtere almindelige downloadopgaver, du vil møde i daglig udvikling og scripting.

Download flere filer på en gang

Brug flere -O flag for at downloade flere filer med en kommando. curl behandler dem sekventielt. Til parallelle downloads, brug xargs eller GNU parallel.

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

Download fra en FTP-server

curl understoetter FTP, FTPS og SFTP indbygget. Tilføj -u user:password for autentificeret adgang. Brug -O for at beholde fjernfilnavnet.

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

Download med autentificering

Brug -u user:pass til Basic Auth eller -H til at sende et Bearer-token eller API-nøgle. Kombiner med -L og -o for en komplet download.

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

Pålidelig download med genoptagelse og gentagelse

Kombiner -C - (genoptag), --retry (automatisk gentagelse ved fejl) og -L (følg omdirigeringer) for robuste downloads, der overlever netværksafbrydelser.

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

Ofte stillede spørgsmål om download med curl

Hvad er forskellen mellem curl -o og curl -O?

-o filename gemmer downloaden med det nøjagtige filnavn, du angiver. -O udtraekker filnavnet fra URL'en og bruger det. Brug -o når du vil have et brugerdefineret navn eller sti; brug -O når fjernfilnavnet er fint som det er.

Hvorfor downloader curl en tom eller HTML-fil i stedet for den faktiske fil?

URL'en returnerer sandsynligvis en HTTP-omdirigering (301 eller 302). Som standard gemmer curl selve omdirigeringssvaret — ikke det endelige indhold. Tilføj -L for automatisk at følge omdirigeringer: curl -L -o file URL.

Hvordan genoptager jeg en delvist downloadet fil med curl?

Brug curl -C - -o filename URL. Flaget -C - detekterer den eksisterende filstørrelse og sender en Range header for kun at anmode om de resterende bytes. Serveren skal understoette range-anmodninger for at dette virker.

Hvordan begrænser jeg downloadhastigheden i curl?

Brug --limit-rate med en vaerdi og suffiks: curl --limit-rate 500k -o file URL begrænser hastigheden til 500 KB/s. Suffikser: k (KB/s), M (MB/s), G (GB/s).

Kan curl downloade flere filer på en gang?

Ja. Brug flere -O flag: curl -O URL1 -O URL2 -O URL3. curl downloader dem sekventielt. Til parallelle downloads, pipe en URL-liste til xargs -P 4 -I {} curl -O {}.

Hvordan downloader jeg en fil, der kræver autentificering?

Til HTTP Basic Auth: curl -u user:pass -o file URL. Til Bearer-tokens: curl -H "Authorization: Bearer TOKEN" -o file URL. Til API-nøgler i headere: curl -H "X-API-Key: KEY" -o file URL.

Hvordan downloader jeg filer fra en FTP-server med curl?

Brug curl -u user:pass -o localfile ftp://host/path/file. curl understoetter FTP, FTPS (FTP over TLS) og SFTP (SSH FTP) indbygget. Til anonym FTP, udelad -u.

Hvordan downloader jeg store filer pålideligt med curl?

Kombiner -C - (genoptag ved fejl), --retry 5 (automatisk gentagelse), --retry-delay 10 og -L (følg omdirigeringer): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Dette håndterer netværksproblemer automatisk.

Hvordan viser jeg en fremskridtsbjælke ved download med curl?

Brug curl -# -o file URL for en simpel fremskridtsbjælke. Standard curl-output viser allerede overførselshastighed, procent og estimeret tid. Til scripts, brug -s for at undertrykke alt output.

Kan jeg angive en downloadmappe i curl?

Med curl 7.73+, brug --output-dir /path/to/dir kombineret med -O. Til ældre versioner, angiv den fulde sti med -o /path/to/dir/filename. Tilføj --create-dirs hvis mappen ikke eksisterer endnu.

Skal jeg bruge curl eller wget til at downloade filer?

Begge er fremragende. wget er simplere til rekursiv website-mirroring og har indbygget gentagelseslogik. curl understoetter 25+ protokoller (ikke kun HTTP/FTP), er bedre til API-kald og scripting, understoetter flere autentificeringsmetoder og er tilgængelig på praktisk talt alle operativsystemer.

Hvordan bruger jeg curl i et bash-script til at downloade filer?

Brug curl -fsSL -o file URL: -f fejler lydløst ved HTTP-fejl (ingen fejlside gemt), -s lydløs, -S vis fejl selv i lydløs tilstand, -L følg omdirigeringer. Tjek exit-koden: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.