Come scaricare file con curl
curl è uno degli strumenti da riga di comando più versatili per scaricare file tramite HTTP, HTTPS, FTP e decine di altri protocolli. Che tu debba salvare una singola risposta API su file o automatizzare download batch in uno script shell, curl ha un flag per questo. Questa guida copre ogni opzione relativa al download — dal salvataggio base con -o e -O alla ripresa dei trasferimenti interrotti con -C -, alla limitazione della banda con --limit-rate e alla visualizzazione delle barre di avanzamento. Ogni flag include una spiegazione chiara, pattern di utilizzo comuni e un esempio pronto da copiare.
Riferimento rapido dei flag di download
Scrivi l'output su un file con nome specificato invece di stdout
Scrivi l'output su un file con il nome del file remoto
Segui automaticamente i redirect HTTP 3xx
Continua/riprendi un trasferimento file precedente
Limita la velocità di trasferimento al valore specificato
Rifiuta di scaricare file più grandi della dimensione specificata
Usa l'header Content-Disposition per nominare il file
Visualizza il progresso del trasferimento come una semplice barra
Fornisci username:password per l'autenticazione del server
Riprova il trasferimento in caso di errori temporanei (numero di tentativi)
Attendi questo numero di secondi tra i tentativi
Carica un file locale su un URL (PUT per default)
Crea le directory locali necessarie quando salvi l'output
Sopprimi il meter di progresso e i messaggi di errore
Salva i file di output nella directory specificata (curl 7.73+)
curl -o: Salva con un nome file specifico
- Cosa fa
- Il flag
-o(o--output) indica a curl di salvare il corpo della risposta nel file specificato. Senza di esso, curl stampa la risposta su stdout (il terminale). Puoi usare qualsiasi nome file e percorso — curl creerà il file o sovrascriverà quello esistente. - Uso comune
- Usa
-oquando devi controllare il nome file esatto o salvare in una directory specifica. Funziona con qualsiasi protocollo — HTTP, HTTPS, FTP, SFTP e altri. Combinalo con-Lper gestire i redirect e-sper operazioni silenziose negli script.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -O: Salva con il nome file remoto
- Cosa fa
- Il flag
-O(o--remote-name) salva il file scaricato usando il nome file estratto dall'URL. Ad esempio, se l'URL termina con/data.csv, curl crea un file chiamatodata.csvnella directory corrente. - Uso comune
- Usa
-Oquando il nome file remoto è significativo e non hai bisogno di rinominarlo. Puoi passare più flag-Oper scaricare diversi file in un singolo comando. Nota: se l'URL non contiene un nome file (es. termina con/), curl fallirà — usa-oin alternativa.
$ curl -O https://example.com/files/data.csvcurl -L: Segui i redirect
- Cosa fa
- Il flag
-L(o--location) fa sì che curl segua automaticamente i redirect HTTP — 301 (Moved Permanently), 302 (Found), 307 e 308. Senza-L, curl restituisce la risposta di redirect stessa invece del contenuto effettivo. - Uso comune
- La maggior parte degli URL di download esegue almeno un redirect (es. da HTTP a HTTPS, o da un URL breve al file effettivo). Combina sempre
-Lcon-oo-Oquando scarichi file. Per default curl segue fino a 50 redirect; modifica questo con--max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -C -: Riprendi download interrotti
- Cosa fa
- Il flag
-C -(o--continue-at -) indica a curl di rilevare automaticamente la dimensione del file parziale esistente e riprendere il download da dove si era interrotto. Il server deve supportare l'header HTTPRangeperché funzioni. - Uso comune
- Se un download grande è stato interrotto da un problema di rete o timeout, riesegui semplicemente lo stesso comando aggiungendo
-C -. curl invierà un headerRange: bytes=OFFSET-e scaricherà solo i dati rimanenti. Questo è essenziale per file grandi su connessioni inaffidabili.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: Limita la velocità di download
- Cosa fa
- Il flag
--limit-ratelimita la velocità di download (e upload) al valore specificato. Accetta suffissi:koKper kilobyte/s,moMper megabyte/s,goGper gigabyte/s. - Uso comune
- Usa
--limit-rateper evitare di saturare la banda quando scarichi file grandi, specialmente su connessioni condivise. È utile anche per testare come la tua applicazione gestisce risposte lente.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: Annulla se il file è troppo grande
- Cosa fa
- Il flag
--max-filesizeindica a curl di annullare il trasferimento se la dimensione attesa del file (dall'headerContent-Length) supera il limite specificato. La dimensione può usare suffissi comek,M,G. - Uso comune
- Usalo negli script per impedire che download inaspettatamente grandi consumino spazio su disco. Nota: non tutti i server inviano
Content-Length— in quel caso, curl non può applicare questo limite e il download procede normalmente.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Usa il nome file suggerito dal server
- Cosa fa
- Il flag
-J(o--remote-header-name) indica a curl di usare il nome file specificato nell'headerContent-Dispositiondel server invece di derivarlo dall'URL. Questo è comune per le API di download che restituiscono file con nomi significativi. - Uso comune
- Combina sempre
-Jcon-O. Questo è utile quando l'URL è un endpoint API (come/export?format=csv) ma il server restituisce un nome file appropriato negli header. Nota di sicurezza: il server controlla il nome file, quindi usalo solo con server affidabili.
$ curl -L -O -J https://example.com/api/export?format=csvcurl -#: Mostra una barra di avanzamento
- Cosa fa
- Il flag
-#(o--progress-bar) sostituisce il meter di progresso verbose predefinito con una semplice barra di avanzamento###. Questo è più facile da leggere per l'uso interattivo. - Uso comune
- Usa
-#quando scarichi in modo interattivo e vuoi un indicatore di progresso pulito. Per gli script, preferisci-s(silenzioso) o il meter di progresso predefinito. L'output predefinito di curl mostra già velocità, percentuale, tempo rimanente e dimensione totale.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzOpzioni di download aggiuntive
Fornisci username:password per l'autenticazione del server
Riprova il trasferimento in caso di errori temporanei (numero di tentativi)
Attendi questo numero di secondi tra i tentativi
Carica un file locale su un URL (PUT per default)
Crea le directory locali necessarie quando salvi l'output
Sopprimi il meter di progresso e i messaggi di errore
Salva i file di output nella directory specificata (curl 7.73+)
Scenari di download reali
Questi esempi combinano più flag per gestire le attività di download comuni che incontrerai nello sviluppo quotidiano e nello scripting.
Scarica più file contemporaneamente
Usa più flag -O per scaricare diversi file in un singolo comando. curl li elabora sequenzialmente. Per download paralleli, usa xargs o GNU parallel.
$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txtDownload da un server FTP
curl supporta nativamente FTP, FTPS e SFTP. Aggiungi -u user:password per l'accesso autenticato. Usa -O per mantenere il nome file remoto.
$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sqlDownload con autenticazione
Usa -u user:pass per Basic Auth, o -H per passare un Bearer token o API key. Combinalo con -L e -o per un download completo.
$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/exportDownload affidabile con ripresa e retry
Combina -C - (ripresa), --retry (retry automatico in caso di errore) e -L (segui redirect) per download robusti che sopravvivono alle interruzioni di rete.
$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zipDomande frequenti sul download con curl
Qual è la differenza tra curl -o e curl -O?
-o nomefile salva il download con il nome file esatto che specifichi. -O estrae il nome file dall'URL e lo usa. Usa -o quando vuoi un nome o percorso personalizzato; usa -O quando il nome file remoto va bene così com'è.
Perché curl scarica un file vuoto o HTML invece del file effettivo?
L'URL probabilmente restituisce un redirect HTTP (301 o 302). Per default, curl salva la risposta di redirect stessa — non il contenuto finale. Aggiungi -L per seguire automaticamente i redirect: curl -L -o file URL.
Come posso riprendere un file parzialmente scaricato con curl?
Usa curl -C - -o nomefile URL. Il flag -C - rileva la dimensione del file esistente e invia un header Range per richiedere solo i byte rimanenti. Il server deve supportare le range request perché funzioni.
Come posso limitare la velocità di download in curl?
Usa --limit-rate con un valore e suffisso: curl --limit-rate 500k -o file URL limita la velocità a 500 KB/s. Suffissi: k (KB/s), M (MB/s), G (GB/s).
Può curl scaricare più file contemporaneamente?
Sì. Usa più flag -O: curl -O URL1 -O URL2 -O URL3. curl li scarica sequenzialmente. Per download paralleli, pipe una lista di URL a xargs -P 4 -I {} curl -O {}.
Come posso scaricare un file che richiede autenticazione?
Per HTTP Basic Auth: curl -u user:pass -o file URL. Per Bearer token: curl -H "Authorization: Bearer TOKEN" -o file URL. Per API key negli header: curl -H "X-API-Key: KEY" -o file URL.
Come posso scaricare file da un server FTP con curl?
Usa curl -u user:pass -o filelocale ftp://host/percorso/file. curl supporta nativamente FTP, FTPS (FTP over TLS) e SFTP (SSH FTP). Per FTP anonimo, ometti -u.
Come posso scaricare file grandi in modo affidabile con curl?
Combina -C - (riprendi in caso di errore), --retry 5 (retry automatico), --retry-delay 10 e -L (segui redirect): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Questo gestisce automaticamente i problemi di rete.
Come posso mostrare una barra di avanzamento durante il download con curl?
Usa curl -# -o file URL per una semplice barra di avanzamento. L'output predefinito di curl mostra già la velocità di trasferimento, la percentuale e il tempo stimato. Per gli script, usa -s per sopprimere tutto l'output.
Posso specificare una directory di download in curl?
Con curl 7.73+, usa --output-dir /percorso/dir combinato con -O. Per versioni precedenti, specifica il percorso completo con -o /percorso/dir/nomefile. Aggiungi --create-dirs se la directory non esiste ancora.
Dovrei usare curl o wget per scaricare file?
Entrambi sono eccellenti. wget è più semplice per il mirroring ricorsivo di siti web e ha una logica di retry integrata. curl supporta oltre 25 protocolli (non solo HTTP/FTP), è migliore per chiamate API e scripting, supporta più metodi di autenticazione ed è disponibile su praticamente ogni sistema operativo.
Come posso usare curl in uno script bash per scaricare file?
Usa curl -fsSL -o file URL: -f fallisce silenziosamente sugli errori HTTP (non salva la pagina di errore), -s silenzioso, -S mostra errori anche in modalità silenziosa, -L segui redirect. Controlla il codice di uscita: if ! curl -fsSL -o file URL; then echo "Download fallito"; exit 1; fi.