Site icon Tosolini.info

Comandi Linux: Compressione dati

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.

Exit mobile version