tar raccoglie più file e cartelle in un unico file, detto archivio, e permette di estrarli di nuovo quando servono. Insieme a un programma di compressione è lo strumento classico per i backup, per spedire una cartella intera e per scaricare e installare software distribuito come "tarball".
Cos'è
tar è l'abbreviazione di tape archive, "archivio su nastro": nasce negli anni Settanta per scrivere i file in sequenza sui nastri magnetici dei backup. Oggi i nastri sono rari, ma il formato e il comando sono rimasti. Su Linux è fornito dal pacchetto GNU tar (/usr/bin/tar), presente su qualsiasi distribuzione.
Un punto da chiarire subito: tar da solo non comprime. Impacchetta e basta, come una scatola in cui metti tante cose. La compressione è un passaggio in più, che tar sa far fare ad altri programmi (gzip, bzip2, xz, zstd) con una semplice opzione. Per questo si incontrano file con nomi come .tar, .tar.gz (o .tgz), .tar.bz2, .tar.xz: il primo pezzo indica l'archivio, il secondo la compressione.
Cosa fa
Ha tre modalità principali, che si scelgono con una lettera:
-c(create): crea un archivio.-x(extract): estrae i file da un archivio.-t(list): elenca il contenuto di un archivio, senza estrarlo.
L'archivio conserva, oltre ai contenuti, anche permessi, proprietari, date e struttura delle cartelle. Alla creazione tar non modifica né cancella i file originali: li copia dentro l'archivio.
Come si usa
$ tar [opzioni] [-f archivio] [file_o_cartelle...]L'opzione -f (file) indica il nome dell'archivio e deve essere l'ultima delle opzioni raggruppate, perché subito dopo viene scritto il nome del file (vedi le avvertenze). Il trattino iniziale è facoltativo con GNU tar: tar -czf e tar czf sono equivalenti.
Per gli esempi usiamo una cartella Documenti con alcuni file di prova:
$ ls -R Documenti
Documenti:
Archivio note.txt relazione.pdf
Documenti/Archivio:
vecchio.txtEsempio 1: creare un archivio
$ tar -cvf documenti.tar Documenti/
Documenti/
Documenti/note.txt
Documenti/relazione.pdf
Documenti/Archivio/
Documenti/Archivio/vecchio.txtLe tre opzioni sono: -c per creare, -v (verbose) per vedere i file mentre vengono aggiunti, -f documenti.tar per il nome dell'archivio. Dopo il nome si elencano i file e le cartelle da includere: una cartella viene aggiunta con tutto il suo contenuto.
Esempio 2: vedere cosa contiene un archivio
$ tar -tf documenti.tar
Documenti/
Documenti/note.txt
Documenti/relazione.pdf
Documenti/Archivio/
Documenti/Archivio/vecchio.txt
$ tar -tvf documenti.tar
drwxr-xr-x enzo/enzo 0 2026-10-02 10:15 Documenti/
-rw-r--r-- enzo/enzo 812 2026-10-02 10:15 Documenti/note.txt
-rw-r--r-- enzo/enzo 1208320 2026-09-28 18:40 Documenti/relazione.pdfCon -t si elenca il contenuto senza estrarre nulla; aggiungendo -v si vedono anche permessi, proprietario, dimensione e data. È buona abitudine guardare sempre cosa c'è dentro prima di estrarre un archivio altrui.
Esempio 3: estrarre un archivio
$ tar -xvf documenti.tarCon -x i file vengono estratti nella cartella corrente, ricreando la struttura originale. Per estrarre altrove si usa -C (change directory), con una cartella che deve già esistere:
$ mkdir -p /tmp/ripristino
$ tar -xvf documenti.tar -C /tmp/ripristinoEsempio 4: comprimere con gzip (.tar.gz)
$ tar -czvf documenti.tar.gz Documenti/
$ tar -xzvf documenti.tar.gzL'opzione -z comprime con gzip in creazione e decomprime in estrazione. È la forma più diffusa: veloce e compatibile ovunque. La frase mnemonica che si sente spesso per l'estrazione è "extract zee vee file" (xzvf).
Le altre compressioni funzionano allo stesso modo, cambiando una lettera:
| Opzione | Compressione | Estensione | Caratteristiche |
|---|---|---|---|
-z | gzip | .tar.gz, .tgz | Veloce, diffusissimo |
-j | bzip2 | .tar.bz2 | Più compatto di gzip, più lento |
-J | xz | .tar.xz | Il più compatto, il più lento in creazione |
--zstd | zstd | .tar.zst | Molto veloce e buon rapporto di compressione (richiede zstd installato) |
Esempio 5: lasciare che tar scelga la compressione
$ tar -caf documenti.tar.xz Documenti/Con -a (auto-compress) tar deduce la compressione dall'estensione del file: .tar.gz, .tar.xz, .tar.bz2, .tar.zst. In estrazione, le versioni recenti di GNU tar riconoscono la compressione da sole, quindi basta:
$ tar -xf documenti.tar.gz
$ tar -xf documenti.tar.xzNon serve ricordare se era z, j o J.
Esempio 6: estrarre un solo file
$ tar -xvf documenti.tar Documenti/note.txt
Documenti/note.txtDopo il nome dell'archivio si indicano i file da estrarre, scritti esattamente come compaiono nell'elenco di tar -t, percorso compreso. Con una cartella si estrae anche tutto ciò che contiene. Per scegliere con un modello si usa --wildcards:
$ tar -xvf documenti.tar --wildcards '*.txt'Esempio 7: un nome con la data
$ tar -czf "backup_$(date +%F).tar.gz" Documenti/
$ ls backup_*
backup_2026-10-10.tar.gzCon $(date +%F) la shell inserisce la data odierna nel formato AAAA-MM-GG, che ordina bene anche in ordine alfabetico. Senza -v tar non stampa nulla: la creazione procede in silenzio e, se è andata bene, il prompt torna e basta.
Esempio 8: escludere file e cartelle
$ tar -czf sito.tar.gz --exclude='*.log' --exclude='cache' sito/L'opzione --exclude salta i file che corrispondono al modello. Mettila prima dei file da archiviare: le opzioni di questo tipo sono "posizionali" e valgono solo per ciò che le segue; messa dopo, tar la ignora e ti avvisa. Si può ripetere più volte, e va scritta tra apici perché il carattere jolly sia interpretato da tar e non dalla shell.
Esempio 9: archiviare senza il percorso completo
$ tar -czf sito.tar.gz /var/www/html
tar: Rimozione di '/' iniziale dai nomi dei file membroSe indichi un percorso assoluto, tar toglie la barra iniziale (per sicurezza, perché in estrazione i file non finiscano per sovrascrivere direttamente quelli di sistema) e l'archivio contiene var/www/html/.... Per avere un archivio "pulito", che contiene solo la cartella html, si usa -C in creazione:
$ tar -czf sito.tar.gz -C /var/www html
$ tar -tf sito.tar.gz | head -n 3
html/
html/index.html
html/css/L'opzione -C fa spostare tar in quella cartella prima di leggere i file indicati dopo di essa.
Esempio 10: togliere i livelli iniziali in estrazione
$ tar -xzf programma-2.5.tar.gz --strip-components=1 -C /opt/programmaMolti archivi di software contengono una cartella radice (per esempio programma-2.5/). Con --strip-components=1 quel primo livello viene saltato, e i file finiscono direttamente nella cartella di destinazione.
Esempio 11: aggiungere file a un archivio
$ tar -rvf documenti.tar nuovo.txtCon -r (append) si aggiungono file a un archivio esistente, e con -u (update) solo quelli più recenti. Funzionano solo su archivi non compressi: per i .tar.gz bisogna ricreare l'archivio.
Esempio 12: confrontare un archivio con i file originali
$ tar -df documenti.tar
Documenti/note.txt: Il tempo di modifica è diverso
Documenti/note.txt: La dimensione è diversaL'opzione -d (diff, o --compare) mostra le differenze tra l'archivio e i file presenti ora sul disco. Utile per verificare un backup o per scoprire cosa è cambiato dopo.
Esempio 13: archivi sulla rete con la pipe
Il trattino - al posto del nome del file significa "usa l'output (o l'input) standard". Così tar si collega ad altri comandi:
# crea il backup direttamente su un altro computer
$ tar -czf - Documenti/ | ssh utente@server "cat > backup.tar.gz"
# copia una cartella intera su un altro computer
$ tar -cf - Documenti/ | ssh utente@server "tar -xf - -C /home/utente/"Nel primo caso l'archivio viene scritto direttamente sul server senza creare un file locale; nel secondo si copia un'intera struttura di cartelle conservando permessi e proprietari. Per copie ripetute esiste rsync, che trasferisce solo le differenze.
Esempio 14: conservare permessi e proprietari
$ sudo tar -xpf backup.tar.gz -C /Come amministratore tar ripristina per impostazione predefinita permessi e proprietari originali. Per un utente normale i proprietari diventano comunque quelli dell'utente che estrae, mentre l'opzione -p (preserve permissions) mantiene i permessi esatti senza applicare la umask.
Esempio 15: uso negli script
Un backup giornaliero con eliminazione dei vecchi:
#!/bin/bash
ORIGINE="$HOME/Documenti"
DEST="$HOME/backup"
mkdir -p "$DEST"
FILE="$DEST/documenti_$(date +%F).tar.gz"
if tar -czf "$FILE" -C "$(dirname "$ORIGINE")" "$(basename "$ORIGINE")"; then
echo "Backup creato: $FILE"
find "$DEST" -name "documenti_*.tar.gz" -mtime +14 -delete
else
echo "Errore nel backup" >&2
exit 1
fiIl comando tar restituisce un codice di uscita: 0 se è andato tutto bene, 1 se qualche file è cambiato mentre veniva letto, 2 per errori gravi. L'if controlla il successo. Il find in coda elimina i backup più vecchi di 14 giorni (come nell'articolo dedicato).
Opzioni utili
-c/-x/-t: crea / estrae / elenca.-f archivio: il nome dell'archivio (-f -per input o output standard).-v: mostra i file elaborati.-z/-j/-J/--zstd: compressione gzip / bzip2 / xz / zstd;-a: sceglie in base all'estensione.-C cartella: lavora in un'altra cartella.--exclude=modello: esclude i file che corrispondono (prima dei file da archiviare).--strip-components=N: toglie i primi N livelli di percorso in estrazione.--wildcards: usa i caratteri jolly per scegliere i file da estrarre.-p: conserva i permessi;-k: non sovrascrive i file esistenti in estrazione.-r/-u: aggiunge / aggiorna file in un archivio non compresso;-d: confronta con i file su disco.--listed-incremental=file: backup incrementali, che salvano solo ciò che è cambiato dall'ultima volta.
Attenzione a
-fva per ultimo:tar -cfv backup.tar Documentinon fa ciò che sembra. Lavviene scambiata per il nome dell'archivio, e il file si chiamerebbev, conbackup.tartrattato come un file da archiviare. Scrivi sempre-cvf,-czvf,-xzvf:fin fondo, subito prima del nome.- Può sovrascrivere un archivio esistente:
tar -cfcon un nome già usato lo rimpiazza senza chiedere conferma. Il nome con la data aiuta a evitarlo. - Non mettere l'archivio dentro la cartella che archivi:
tar -czf Documenti/backup.tar.gz Documenti/tenta di includere l'archivio in sé stesso.tarse ne accorge e lo salta con un avviso, ma il risultato è confuso. Salva l'archivio altrove. - Gli archivi altrui vanno guardati prima: un archivio "scatolone" può contenere centinaia di file nella radice e riempirti la cartella corrente (il cosiddetto tarbomb). Con
tar -tf archivio | headcontrolli com'è fatto; in dubbio, estrai in una cartella nuova con-C. - L'estrazione sovrascrive in silenzio: i file con lo stesso nome nella cartella di destinazione vengono sostituiti. Con
-k(keep old files) i file già presenti non vengono toccati etarli segnala come errori; con--skip-old-filesvengono saltati in silenzio. - Archivi non fidati e percorsi sospetti: non estrarre come amministratore archivi di provenienza dubbia. Archivi manipolati possono contenere percorsi con
..o link simbolici che puntano fuori dalla cartella di destinazione. Le versioni recenti di GNU tar bloccano i casi più evidenti, ma la prudenza resta. - File che cambiano durante la copia: archiviare database o macchine virtuali in funzione può produrre un backup incoerente, e
taravvisa che "il file è cambiato mentre veniva letto". Per i database servono i loro strumenti di dump. - Un archivio compresso è fragile: se un
.tar.gzsi danneggia a metà, spesso si perde tutto ciò che viene dopo il punto del danno. Per backup importanti, verifica contar -tzfotar -dfe tieni più copie. - Non è
zip: se devi mandare file a chi usa Windows, un.zip(creato con il comandozip) si apre con un doppio clic ovunque; i.tar.gzrichiedono programmi aggiuntivi o le versioni recenti di Windows. In compensotarconserva meglio permessi, proprietari e link tipici di Linux. - Il nome non è la compressione: chiamare un file
.tar.gzsenza usare-zproduce un semplice.tarcon un nome fuorviante. Con il comandofile nomearchiviopuoi verificare cosa contiene davvero.
Riepilogo
| Comando | Cosa fa |
|---|---|
tar -cvf a.tar cartella/ | Crea un archivio non compresso |
tar -czvf a.tar.gz cartella/ | Crea un archivio compresso con gzip |
tar -caf a.tar.xz cartella/ | Crea un archivio, compressione scelta dall'estensione |
tar -tf a.tar.gz | Elenca il contenuto |
tar -xvf a.tar | Estrae un archivio |
tar -xf a.tar.gz -C cartella | Estrae in un'altra cartella |
tar -xvf a.tar percorso/file | Estrae un solo file |
tar -czf a.tar.gz --exclude='*.log' dir/ | Crea escludendo dei file |
tar -czf a.tar.gz -C /percorso dir | Crea senza il percorso completo |
tar -xzf a.tar.gz --strip-components=1 | Estrae saltando la cartella radice |
tar -df a.tar | Confronta l'archivio con i file su disco |
tar -czf - dir | ssh host "cat > a.tar.gz" | Crea un backup direttamente su un altro computer |