Salta al contenuto principale

tar: crea ed estrai archivi e backup

Inviato da enzo de simone il

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.txt

Esempio 1: creare un archivio

$ tar -cvf documenti.tar Documenti/
Documenti/
Documenti/note.txt
Documenti/relazione.pdf
Documenti/Archivio/
Documenti/Archivio/vecchio.txt

Le 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.pdf

Con -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.tar

Con -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/ripristino

Esempio 4: comprimere con gzip (.tar.gz)

$ tar -czvf documenti.tar.gz Documenti/
$ tar -xzvf documenti.tar.gz

L'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:

OpzioneCompressioneEstensioneCaratteristiche
-zgzip.tar.gz, .tgzVeloce, diffusissimo
-jbzip2.tar.bz2Più compatto di gzip, più lento
-Jxz.tar.xzIl più compatto, il più lento in creazione
--zstdzstd.tar.zstMolto 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.xz

Non serve ricordare se era z, j o J.

Esempio 6: estrarre un solo file

$ tar -xvf documenti.tar Documenti/note.txt
Documenti/note.txt

Dopo 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.gz

Con $(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 membro

Se 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/programma

Molti 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.txt

Con -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 è diversa

L'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
fi

Il 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

  • -f va per ultimo: tar -cfv backup.tar Documenti non fa ciò che sembra. La v viene scambiata per il nome dell'archivio, e il file si chiamerebbe v, con backup.tar trattato come un file da archiviare. Scrivi sempre -cvf, -czvf, -xzvf: f in fondo, subito prima del nome.
  • Può sovrascrivere un archivio esistente: tar -cf con 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. tar se 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 | head controlli 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 e tar li segnala come errori; con --skip-old-files vengono 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 tar avvisa che "il file è cambiato mentre veniva letto". Per i database servono i loro strumenti di dump.
  • Un archivio compresso è fragile: se un .tar.gz si danneggia a metà, spesso si perde tutto ciò che viene dopo il punto del danno. Per backup importanti, verifica con tar -tzf o tar -df e tieni più copie.
  • Non è zip: se devi mandare file a chi usa Windows, un .zip (creato con il comando zip) si apre con un doppio clic ovunque; i .tar.gz richiedono programmi aggiuntivi o le versioni recenti di Windows. In compenso tar conserva meglio permessi, proprietari e link tipici di Linux.
  • Il nome non è la compressione: chiamare un file .tar.gz senza usare -z produce un semplice .tar con un nome fuorviante. Con il comando file nomearchivio puoi verificare cosa contiene davvero.

Riepilogo

ComandoCosa 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.gzElenca il contenuto
tar -xvf a.tarEstrae un archivio
tar -xf a.tar.gz -C cartellaEstrae in un'altra cartella
tar -xvf a.tar percorso/fileEstrae un solo file
tar -czf a.tar.gz --exclude='*.log' dir/Crea escludendo dei file
tar -czf a.tar.gz -C /percorso dirCrea senza il percorso completo
tar -xzf a.tar.gz --strip-components=1Estrae saltando la cartella radice
tar -df a.tarConfronta l'archivio con i file su disco
tar -czf - dir | ssh host "cat > a.tar.gz"Crea un backup direttamente su un altro computer