Vediamo un piccolo specchietto riepilogativo riguardo ai maggiori comandi di compressione e decompressione in ambiente Linux. Stiamo parlando della linea di comando.
TAR
Tar è in grado di fare da solo praticamente quasi tutto e negli anni si è evoluto parecchio. Ad esempio non gestisce solamente i file tar, ma anche quelli più “spinti” con algoritmi di compressione come i più famosi gzip o bzip2 oppure il doppio passaggio come tar.gz e tar.bz2.
Compressione
Per comprimere si usa la sintassi
[textmarker color=”cfcfcf”] tar cf file.tar archivio [/textmarker]
in questo caso il comando cf sta per create files seguito dal nome del file compresso (ed eventualmente una path se desideriamo venga creato altrove) seguito dall’archivio. Ovvero il file, o i files oppure da una directory che faranno da “sorgente” per la compressione. Anche in questo caso può essere indicata la path se desideriamo utilizzare i files da più path alternative.
Possiamo anche creare dei file compressi più evoluti, con le opzioni di compressione:
-j, –bzip2 Filtra l’archivio attraverso bzip2
-z, –gzip, –gunzip, –ungzip Filtra l’archivio attraverso gzip
Prendendo il primo esempio, vogliamo utilizzare gzip aggiungiamo la z e scriveremo
[textmarker color=”cfcfcf”] tar czf file.tar.gz archivio [/textmarker]
Nel caso di bzip2 utilizzeremo la lettera j
[textmarker color=”cfcfcf”] tar cjf file.tar.bz2 archivio [/textmarker]
Decompressione
Se c’è la compressione non può non esserci il suo contrario. Il procedimento è simile a quello della compressione, solo che al posto del valore c (create) c’è il valore x (extract), e non è presente l’archivio.
[textmarker color=”cfcfcf”] tar xf file.tar [/textmarker]
Anche in questo caso è possibile utilizzare file differenti da TAR.
[textmarker color=”cfcfcf”] tar xzf file.tar.gz [/textmarker]
[textmarker color=”cfcfcf”] tar xjf file.tar.bz2 [/textmarker]
Di seguito il file HELP relativo a TAR.
[toggles title=”File Help di TAR”]
Esempi:
tar -cf archivio.tar pippo pluto # Crea archivio.tar dai file pippo pluto
tar -tvf archivio.tar # Elenca i file in archivio.tar
tar -xf archivio.tar # Estrae tutti i file da archivio.tar
Modi operativi principali:
-A, –catenate, –concatenate Aggiunge il contenuto di un altro archivio
-c, –create Crea un nuovo archivio
-d, –diff, –compare Trova differenze tra l’archivio e il file system
–delete Elimina dall’archivio (non su nastri magnetici)
-r, –append Accoda i file alla fine di un archivio
-t, –list Elenca i contenuti dell’archivio
–test-label Verifica l’etichetta di volume dell’archivio ed
esce
-u, –update Accoda solo i file più recenti della copia
nell’archivio
-x, –extract, –get Estrae file da un archivio
Modificatori delle operazioni:
–check-device Controlla i numeri del device quando crea archivi
incrementali (predefinito)
-g, –listed-incremental=FILE Gestisce il nuovo formato di backup
incrementali GNU
-G, –incremental gestisce i vecchi backup incrementali GNU
–ignore-failed-read Non esce con non-zero quando ci sono file non
leggibili
–level=NUMERO Livello di dump per l’archivio a lista
incrementale creato
-n, –seek L’archivio è posizionabile
–no-check-device Non controlla i numeri del device quando crea
archivi incrementali
–no-seek L’archivio non è posizionabile
–occurrence[=NUMERO] Elabora solo la NUMERO-esima occorrenza di ogni
file nell’archivio; quest’opzione è valida solo
se usata insieme a uno dei sottocomandi –delete,
–diff, –extract o –list e quando viene fornito
un elenco di file sulla riga di comando o
attraverso l’opzione -T; il valore predefinito di
NUMERO è 1
–sparse-version=MAJOR[.MINOR]
Imposta la versione da usare per il formato sparso
(implica –sparse)
-S, –sparse Gestisce efficientemente i file sparsi
Controlli di sovrascrittura:
-k, –keep-old-files Durante l’estrazione non sovrascrive i file
esistenti, li considera errori
–keep-directory-symlink Mantiene i collegamenti simbolici a directory
durante l’estrazione
–keep-newer-files Non sostituisce i file esistenti più recenti
delle copie nell’archivio
–no-overwrite-dir Preserva i metadati delle directory esistenti
–overwrite Sovrascrive i file esistenti durante l’estrazione
–overwrite-dir Sovrascrive i metadati delle directory esistenti
durante l’estrazione (predefinito)
–recursive-unlink Svuota le directory prima di estrarle
–remove-files Rimuove i file dopo averli aggiunti all’archivio
–skip-old-files Durante l’estrazione non sovrascrive i file
esistenti, li ignora
-U, –unlink-first Rimuove ogni file prima di estrarre su di esso
-W, –verify Tenta di verificare l’archivio dopo averlo
scritto
Selezione stream di output:
–ignore-command-error Ignora il codice di uscita dei figli
–no-ignore-command-error Considera i codici di uscita non-zero come un
errore
-O, –to-stdout Estrae i file sullo standard output
–to-command=COMANDO Invia in pipe i file estratti a un altro
programma
Gestione degli attributi dei file:
–atime-preserve[=METODO] Preserva l’orario di accesso sui file
archiviati, ripristinando l’orario dopo la lettura
(METODO=”replace”; predefinito) o impostando
l’orario all’inizio (METODO=”system”)
–delay-directory-restore Ritarda l’impostazione dei tempi di modifica
e dei permessi delle directory estratte al termine
dell’estrazione
–group=NOME Forza NOME come gruppo per i file aggiunti
–mode=CAMBI Forza il modo CAMBI (simbolico) per i file
aggiunti
–mtime=DATA-O-FILE Imposta mtime per i file aggiunti da DATA-O-FILE
-m, –touch Non estrae l’orario di ultima modifica del file
–no-delay-directory-restore
Annulla l’effetto dell’opzione
–delay-directory-restore
–no-same-owner Estrae i file come l’utente attuale (predefinito
per gli utenti normali)
–no-same-permissions Applica la umask dell’utente nell’estrarre i
permessi dall’archivio (predefinito per gli utenti
normali)
–numeric-owner Usa sempre i numeri per i nomi di utente/gruppo
–owner=NOME Forza NOME come proprietario per i file aggiunti
-p, –preserve-permissions, –same-permissions
Estrae informazioni riguardo i permessi dei file
(predefinito per il super-utente)
–preserve Come -p e -s assieme
–same-owner Cerca di estrarre i file con lo stesso
proprietario come presente nell’archivio
(predefinito per il super utente)
-s, –preserve-order, –same-order
Gli argomenti sono elencati nello stesso ordine
dei file nell’archivio
Gestione degli attributi estesi dei file:
–acls Abilita support ACL POSIX
–no-acls Disabilita supporto ACL POSIX
–no-selinux Disabilita supporto contesto SELinux
–no-xattrs Disabilita supporto degli attributi estesi
–selinux Abilita supporto contesto SELinux
–xattrs Abilita supporto degli attributi estesi
–xattrs-exclude=MASCHERA Specifica il modello di esclusione per le
chiavi xattr
–xattrs-include=MASCHERA Specifica il modello di inclusione per le
chiavi xattr
Selezione e cambio del device:
-f, –file=ARCHIVIO Usa come archivio il file o il dispositivo
ARCHIVIO
–force-local L’archivio è locale anche se contiene “:”
-F, –info-script=NOME, –new-volume-script=NOME
Esegue lo script alla fine di ogni nastro (implica
-M)
-L, –tape-length=NUMERO Cambia il nastro dopo avere scritto NUMERO × 1024
byte
-M, –multi-volume Crea, elenca, estrae archivi multi-volume
–rmt-command=COMANDO Usa il COMANDO rmt indicato invece di rmt
–rsh-command=COMANDO Usa il COMANDO remoto invece di rsh
–volno-file=FILE Usa/aggiorna il numero del volume nel FILE
Blocchi del device:
-b, –blocking-factor=BLOCCHI Usa record di BLOCCHI × 512 byte
-B, –read-full-records Rifà i blocchi durante la lettura (per le pipe di
4.2BSD)
-i, –ignore-zeros Ignora i blocchi a zero nell’archivio (significa
EOF)
–record-size=NUMERO NUMERO di byte per record, multiplo di 512
Selezione formato di archiviazione:
-H, –format=FORMATO Crea archivi nel formato indicato
FORMATO è uno dei seguenti:
gnu Formato GNU di tar 1.13.x
oldgnu Formato GNU di tar <= 1.12
pax Formato POSIX 1003.1-2001 (pax)
posix Come pax
ustar Formato POSIX 1003.1-1988 (ustar)
v7 Vecchio formato di tar V7
–old-archive, –portability
Come –format=v7
–pax-option=PAROLA_CHIAVE[[:]=VALORE][,PAROLA_CHIAVE[[:]=VALORE], …]
Controlla le parole chiavi di pax
–posix Come –format=posix
-V, –label=TESTO Crea l’archivio con TESTO come nome di volume;
durante l’elencazione o l’estrazione, usa TESTO
come modello di glob per ogni volume
Opzioni di compressione:
-a, –auto-compress Usa il suffisso dell’archivio per determinare il
programma di compressione
-I, –use-compress-program=PROG
Filtra attraverso PROG (deve accettare -d)
-j, –bzip2 Filtra l’archivio attraverso bzip2
-J, –xz Filtra l’archivio attraverso xz
–lzip Filtra l’archivio attraverso lzip
–lzma Filtra l’archivio attraverso xz
–lzop
–no-auto-compress Non usa il suffisso dell’archivio per determinare
il programma di compressione
-z, –gzip, –gunzip, –ungzip Filtra l’archivio attraverso gzip
-Z, –compress, –uncompress Filtra l’archivio attraverso compress
Selezione dei file locali:
–add-file=FILE Aggiunge FILE all’archivio (utile se il nome
inizia con un trattino)
–backup[=CONTROLLO] Esegue un backup prima di rimuovere, usando il
CONTROLLO di versione
-C, –directory=DIR Passa alla directory DIR
–exclude=MODELLO Esclude i file i cui nomi corrispondono a MODELLO
–exclude-backups Esclude i file di backup e di blocco
–exclude-caches Esclude i contenuti delle directory contenenti
CACHEDIR.TAG, a parte il file .TAG stesso
–exclude-caches-all Esclude le directory contenenti CACHEDIR.TAG
–exclude-caches-under Esclude tutto quanto all’interno di directory
contenenti CACHEDIR.TAG
–exclude-tag=FILE Esclude i contenuti delle directory contenenti
FILE, a parte FILE stesso
–exclude-tag-all=FILE Esclude le directory contenenti FILE
–exclude-tag-under=FILE Esclude tutto quanto all’interno di directory
contenenti FILE
–exclude-vcs Esclude le directory dei sistemi di controllo
della versione
-h, –dereference Segue i collegamenti simbolici; archivia ed esegue
il dump dei file a cui puntano
–hard-dereference Segue i collegamenti fisici; archivia ed esegue il
dump dei file a cui si riferiscono
-K, –starting-file=NOME Inizia dal membro NOME durante la lettura
dell’archivio
–newer-mtime=DATA Confronta data e ora solo quando il contenuto è
cambiato
–no-null Disabilita l’effetto dell’opzione –null
precedente
–no-recursion Non entra automaticamente nelle directory
–no-unquote Non toglie i caratteri di citazione dai nomi dei
file letti con -T
–null -T legge nomi terminati da NULL, disabilita -C
-N, –newer=DATA-O-FILE, –after-date=DATA-O-FILE
Archivia solo i file più recenti di DATA-O-FILE
–one-file-system Resta nel file system locale durante la creazione
dell’archivio
-P, –absolute-names Non rimuove le “/” iniziali dai nomi dei file
–recursion Entra ricorsivamente nelle directory
(predefinito)
–suffix=STRINGA Esegue un backup prima di rimuovere,
sovrascrivendo il suffisso “~” a meno che non sia
sovrascritto dalla variabile d’ambiente
SIMPLE_BACKUP_SUFFIX
-T, –files-from=FILE Prende i nomi da estrarre o creare dal file FILE
–unquote Toglie i caratteri di citazione dai nomi dei file
letti con -T (predefinito)
-X, –exclude-from=FILE Esclude i modelli elencati in FILE
Trasformazioni dei nomi di file:
–strip-components=NUMERO Toglie NUMERO componenti iniziali dai nomi
dei file durante l’estrazione
–transform=ESPRESSIONE, –xform=ESPRESSIONE
Usa un’ESPRESSIONE di sostituzione di sed per
trasformare i nomi dei file
Opzioni di corrispondenza del nome del file (vale sia per i modelli di
esclusione che inclusione):
–anchored I modelli corrispondono all’inizio del nome del
file
–ignore-case Non fa differenza tra maiuscole e minuscole
–no-anchored I modelli corrispondono dopo qualsiasi “/”
(predefinito per le esclusioni)
–no-ignore-case Considera diverse le maiuscole e le minuscole
(predefinito)
–no-wildcards Corrispondenza letterale della stringa
–no-wildcards-match-slash I metacaratteri non corrispondono “/”
–wildcards Utilizza i metacaratteri (predefinito per le
esclusioni)
–wildcards-match-slash I metacaratteri corrispondono “/” (predefinito
per le esclusioni)
Output informativo:
–checkpoint[=NUMERO] Visualizza un messaggio di avanzamento ogni
NUMERO-esimo record (predefinito 10)
–checkpoint-action=AZIONE Esegue l’azione a ogni punto di controllo
–full-time Stampa la data del file in tutti i suoi dettagli
–index-file=FILE Invia l’output prolisso al FILE
-l, –check-links Stampa un messaggio se non tutti i collegamenti
sono archiviati
–no-quote-chars=STRINGA Disabilita la citazione per i caratteri dalla
STRINGA
–quote-chars=STRINGA Caratteri di citazione aggiuntivi da STRINGA
–quoting-style=STILE Imposta lo stile di citazione del nome; consultare
più sotto per i valori di STILE consentiti
-R, –block-number Mostra il numero di blocco nell’archivio con ogni
messaggio
–show-defaults Mostra le impostazioni predefinite di tar
–show-omitted-dirs All’elencazione o all’estrazione, elenca ogni
directory che non corrisponde al criterio di
ricerca
–show-snapshot-field-ranges
Mostra gli intervalli validi per i campi
snapshot-file
–show-transformed-names, –show-stored-names
Mostra il nome del file o dell’archivio dopo la
trasformazione
–totals[=SEGNALE] Stampa i byte totali dopo l’elaborazione
dell’archivio; con un argomento – stampa i byte
totali quando viene inviato il SEGNALE. I segnali
consentiti sono: SIGHUP, SIGQUIT, SIGINT, SIGUSR1
e SIGUSR2; sono accettati anche i nomi senza il
prefisso SIG
–utc Stampa le date di modifica del file in formato
UTC
-v, –verbose Elenca prolissamente i file elaborati
–warning=PAROLACHIAVE Controllo di avviso
-w, –interactive, –confirmation
Chiede conferma per ogni azione
Opzioni di compatibilità:
-o Alla creazione, uguale a –old-archive;
all’estrazione, uguale a –no-same-owner
Altre opzioni:
-?, –help Mostra questo aiuto
–restrict Disabilita l’uso di alcune opzioni potenzialmente
dannose
–usage Mostra un breve messaggio sull’uso
–version Stampa la versione del programma
Gli argomenti obbligatori o facoltativi per le opzioni estese lo sono anche per
le corrispondenti opzioni brevi.
Il suffisso dei backup è “~” a meno che non sia impostato con –suffix oppure
SIMPLE_BACKUP_SUFFIX.
Il controllo di versione può essere impostato con –backup oppure con
VERSION_CONTROL. I valori possibili sono:
none, off Non esegue mai i backup
t, numbered Esegue backup numerati
nil, existing Numerati se esistono backup numerati, altrimenti semplici
never, simple Esegue sempre backup semplici
Argomenti validi per l’opzione –quoting-style sono:
literal
shell
shell-always
c
c-maybe
escape
locale
clocale
Questa versione di tar ha le seguenti impostazioni predefinite:
–format=gnu -f- -b20 –quoting-style=escape –rmt-command=/usr/lib/tar/rmt
–rsh-command=/usr/bin/rsh
[/toggles]
Oltre a TAR esistono altri due comandi piuttosto utilizzati. Sono Gzip e Gunzip e Zip e Unzip.
Sebbene in realtà come abbiamo visto Gzip è gestito direttamente da tar con il doppio passaggio ( file.tar.gz ), Gzip può gestire direttamente il file compresso ( file.gz ).
La procedura è più semplice, nel caso abbiamo un solo file gli diamo un comando molto stringato, ovvero comando e il nome file da comprimere. Automaticamente verrà creato un file compresso con il nome del file non compresso.
[textmarker color=”CFCFCF”] gzip nomefile [/textmarker]
Nel caso dobbiamo operare con le Directory dobbiamo dare l’opzione -r.
Per la decompressione invece abbiamo due opzioni, utilizzare sempre gzip o il suo alias gunzip.
[textmarker color=”CFCFCF”] gzip -d nomefile.gz [/textmarker]
oppure
[textmarker color=”CFCFCF”] gunzip nomefile.gz [/textmarker]
[toggles title=”File Help di Gzip/Gunzip”]
Usage: gzip [OPTION]… [FILE]…
Compress or uncompress FILEs (by default, compress FILES in-place).
Mandatory arguments to long options are mandatory for short options too.
-c, –stdout write on standard output, keep original files unchanged
-d, –decompress decompress
-f, –force force overwrite of output file and compress links
-h, –help give this help
-k, –keep keep (don’t delete) input files
-l, –list list compressed file contents
-L, –license display software license
-n, –no-name do not save or restore the original name and time stamp
-N, –name save or restore the original name and time stamp
-q, –quiet suppress all warnings
-r, –recursive operate recursively on directories
-S, –suffix=SUF use suffix SUF on compressed files
-t, –test test compressed file integrity
-v, –verbose verbose mode
-V, –version display version number
-1, –fast compress faster
-9, –best compress better
–rsyncable Make rsync-friendly archive
With no FILE, or when FILE is -, read standard input.
[/toggles]
Per i file .zip la sintassi è praticamente identica a tar, si indica il nome del file compresso e l’archivio.
[textmarker color=”CFCFCF”] zip nomefile.zip archivio [/textmarker]
[toggles title=”File help di Zip”]
Copyright (c) 1990-2008 Info-ZIP – Type ‘zip “-L”‘ for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
The default action is to add or replace zipfile entries from list, which
can include the special name – to compress standard input.
If zipfile and list are omitted, zip compresses stdin to stdout.
-f freshen: only changed files -u update: only changed or new files
-d delete entries in zipfile -m move into zipfile (delete OS files)
-r recurse into directories -j junk (don’t record) directory names
-0 store only -l convert LF to CR LF (-ll CR LF to LF)
-1 compress faster -9 compress better
-q quiet operation -v verbose operation/print version info
-c add one-line comments -z add zipfile comment
-@ read names from stdin -o make zipfile as old as latest entry
-x exclude the following names -i include only the following names
-F fix zipfile (-FF try harder) -D do not add directory entries
-A adjust self-extracting exe -J junk zipfile prefix (unzipsfx)
-T test zipfile integrity -X eXclude eXtra file attributes
-y store symbolic links as the link instead of the referenced file
-e encrypt -n don’t compress these suffixes
-h2 show more help
[/toggles]
Mentre per la parte di decompressione si può utilizzare direttamente unzip
[textmarker color=”CFCFCF”] unzip nomefile.zip [/textmarker]
[toggles title=”File Help di Unzip”]
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
Default action is to extract files in list, except those in xlist, to exdir;
file[.zip] may be a wildcard. -Z => ZipInfo mode (“unzip -Z” for usage).
-p extract files to pipe, no messages -l list files (short format)
-f freshen existing files, create none -t test compressed archive data
-u update files, create if necessary -z display archive comment only
-v list verbosely/show version info -T timestamp archive to latest
-x exclude files that follow (in xlist) -d extract files into exdir
modifiers:
-n never overwrite existing files -q quiet mode (-qq => quieter)
-o overwrite files WITHOUT prompting -a auto-convert any text files
-j junk paths (do not make directories) -aa treat ALL files as text
-U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields
-C match filenames case-insensitively -L make (some) names lowercase
-X restore UID/GID info -V retain VMS version numbers
-K keep setuid/setgid/tacky permissions -M pipe through “more” pager
-O CHARSET specify a character encoding for DOS, Windows and OS/2 archives
-I CHARSET specify a character encoding for UNIX and other archives
See “unzip -hh” or unzip.txt for more help. Examples:
unzip data1 -x joe => extract all files except joe from zipfile data1.zip
unzip -p foo | more => send contents of foo.zip via pipe into program more
unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer
[/toggles]
Conclusioni
Sotto Linux è facilmente e gestibile, anche nei minimi dettagli, la compressione e decompressione dei file attraverso la linea di comando. Si noti che utilizzando l’opzione -v, ovvero verbose si può rallentare il processo poiché dovrà mostrare a video il lavoro che sta svolgendo. Se può essere interessante e utile durante la compressione di un singolo file piuttosto grosso per capire quanto manca al termine del lavoro, risulta abbastanza inutile nel caso di migliaia di file piccoli.