Comando wget in Linux: scaricare file e riprendere download interrotti

wget è uno strumento GNU per scaricare file da URL tramite HTTP, HTTPS o FTP. Salva i dati su disco ed è utile anche per riprendere un download interrotto, purché il server e il file remoto consentano una ripresa coerente.

In un download singolo usa normalmente un nome ricavato dall'URL nella directory corrente. Con -O scegli un file di uscita; con -c chiedi di continuare un file parziale già esistente. Il download ricorsivo può coinvolgere molte risorse: prima di attivarlo definisci ambito, permessi e limiti del sito.

Sintassi e preparazione

wget [options] URL

È una descrizione della sintassi: sostituisci URL e opzioni, senza digitare le parentesi quadre. Controlla la versione con wget --version e il manuale locale con man wget. Questa guida si riferisce a GNU Wget; altri programmi omonimi o implementazioni ridotte possono avere opzioni differenti.

Prima di scaricare scegli una directory con spazio libero e permessi di scrittura, e controlla i file già presenti. Per HTTPS deve essere disponibile il supporto TLS (Transport Layer Security) della compilazione installata. Gli indirizzi di example.com nei comandi illustrano la forma delle richieste: non garantiscono un contenuto fisso o l'esistenza dell'archivio indicato.

Scaricare un file e scegliere il nome

Download singolo. Per scaricare una pagina nella directory corrente:

wget https://example.com/

Per un URL che termina con una barra, GNU Wget usa normalmente index.html come nome predefinito. Per un URL con un nome di file, il nome locale deriva normalmente dall'URL: non presumere che sia sempre quello dichiarato dal server in Content-Disposition, il cui uso richiede un'opzione specifica. Leggi il percorso effettivo riportato nei messaggi.

Nella modalità singola ordinaria, senza opzioni che cambino la gestione dei file, ripetere il download di un nome già presente produce copie con suffissi come .1 e .2. Questo comportamento non si applica indiscriminatamente a -O, alle riprese o ai download ricorsivi.

Nome esplicito. Per scegliere il file di uscita:

wget -O example.html https://example.com/

-O è una O maiuscola e non è un'opzione di log. Il file indicato viene troncato subito: se esiste, puoi perderne il contenuto anche se la richiesta successivamente fallisce. Usa un nome nuovo o conserva prima una copia dei dati da proteggere. Con più URL, -O convoglia i contenuti nello stesso file; non assegna quel nome separatamente a ogni risorsa.

Riprendere un download interrotto con -c

Per chiedere la ripresa di un archivio parziale:

wget -c https://example.com/archive.tar.gz

L'URL dell'archivio è un segnaposto di esempio. Per il tuo download usa la sorgente reale e assicurati che archive.tar.gz nella directory corrente sia proprio la parte iniziale dello stesso file remoto. Con HTTP la ripresa richiede il supporto delle richieste Range: Wget chiede i dati a partire da una posizione pari alla lunghezza locale.

-c riguarda un file lasciato da una precedente esecuzione. Non è necessario aggiungerlo soltanto per consentire alla stessa esecuzione di ritentare dopo un'interruzione di connessione: Wget dispone già di una gestione dei tentativi.

  • Se il server non supporta la continuazione, Wget può ricominciare dall'inizio e sovrascrivere il file locale.
  • Se il file remoto ha la stessa dimensione di quello locale, GNU Wget normalmente non lo scarica di nuovo; ciò non dimostra che i contenuti coincidano.
  • Se il remoto è più piccolo, normalmente non prosegue. Se è più grande, può aggiungere la parte mancante, assumendo che il file locale sia un prefisso valido.

Se il file remoto è stato modificato e non soltanto esteso, questa assunzione può produrre un risultato corrotto. Wget non verifica automaticamente che i byte già presenti corrispondano all'inizio del remoto. Conserva il parziale se necessario, riparti con un file nuovo quando la provenienza è incerta e verifica l'hash o la firma dell'archivio completo.

Controllare il risultato dopo il download

Questo esempio salva la risposta e poi mostra le informazioni del file:

wget -O example.html https://example.com
ls -lh example.html

Le due righe sono comandi separati: ls può riuscire anche dopo un download fallito, se il file è vuoto, parziale o già presente. Per controllare l'esito di wget in Bash leggi rc=$? subito dopo wget, prima di eseguire ls o altri comandi. Il codice 0 significa che Wget non ha rilevato problemi; i codici documentati distinguono, fra gli altri, errori di scrittura (3), di rete (4), di verifica del certificato (5) e risposte di errore del server (8).

ls -lh mostra nome e dimensione leggibile: non verifica contenuto, integrità o autenticità. Non aspettarti un numero fisso di byte per una pagina che può cambiare. Per un file distribuito ufficialmente confronta il checksum con quello pubblicato dal fornitore oppure verifica la firma con una chiave ottenuta da una fonte fidata.

I messaggi di avanzamento e diagnostica sono normalmente separati dal file scaricato e possono comparire sullo standard error. L'assenza di testo nel terminale, soprattutto con -q, non sostituisce il controllo del codice di uscita. Per analizzare specificamente intestazioni e stato HTTP puoi anche usare curl e la distinzione tra stato HTTP ed esito del comando.

Opzioni principali e limiti delle verifiche

Opzione Uso
-O file Scrive nel file scelto, troncandolo immediatamente.
-P directory Imposta il prefisso della directory di destinazione.
-c Richiede la continuazione di un file parziale esistente.
-q Disattiva i messaggi del programma.
--spider Controlla la presenza delle risorse senza salvarle come download ordinari.
-r Segue ricorsivamente le risorse collegate.

file e directory sono segnaposto da sostituire. -P definisce una directory di base; non equivale a scegliere un singolo nome di uscita con -O. --spider non dimostra che il contenuto sia quello atteso o che un browser autenticato possa usarlo: accessibilità, metodo della richiesta e contenuto sono controlli diversi.

Non iniziare una raccolta ricorsiva soltanto per scaricare un file. Quando è necessaria e consentita, limita profondità e percorsi, evita di risalire alle directory superiori e prevedi pause fra le richieste. Considera anche lo spazio disco: il numero di risorse collegate può superare rapidamente quello previsto.

Domande frequenti

wget -c riprende sempre il download in modo sicuro?

No. Il server deve consentire la ripresa e il file locale deve essere una parte iniziale valida della stessa versione remota. Dimensioni uguali non garantiscono contenuti uguali; al termine verifica checksum o firma. Se il remoto è cambiato, conserva il parziale necessario e scarica una nuova copia separata.

Documentazione di riferimento

Il manuale incluso nell'archivio sorgente ufficiale GNU Wget 1.25.0, in doc/wget.texi, descrive nomi di uscita, continuazione, opzioni e codici di uscita. Per il comportamento della tua installazione confronta anche il manuale locale della versione effettivamente usata.