4 069
contributi
Riga 524: | Riga 524: | ||
=== Comprimere files e directory === | === Comprimere files e directory === | ||
La creazione di un nuovo file con il comando <tt>tar</tt> viene fatta mediante l'opzione <tt>-c</tt> indicando il nome del file da creare e il file o la directory originali: | |||
<code> | |||
$ tar cf nuovo.tar dir/ | |||
</code> | |||
Il file creato contiene l'intera directory <tt>dir/</tt>. Per estrarre la directory dall'archivio utilizziamo l'opzione <tt>-x</tt>: | |||
<code> | |||
$ tar xf nuovo.tar | |||
</code> | |||
l'archivio verrà estratto interamente nella directory corrente.<br/> | |||
L'opzione <tt>-f</tt> utilizzata fino ad ora serve ad indicare che il campo direttamente successivo sarà il nome dell'archivio. | |||
<br/> | |||
Tuttavia in questo esempio non abbiamo utilizzato alcun software di compressione per ridurre la dimensione dei dati nell'archivio. Per farlo possiamo scegliere se utilizzare il software di compressione ''gzip'' (opzione -z) o con ''bzip2'' (opzione -j): | |||
<code> | |||
$ tar czf nuovo.tar.gz dir/ # utilizza gzip | |||
$ tar cjf nuovo.tar.bz2 dir/ # utilizza bzip2 | |||
</code> | |||
Analogamente per decomprimere: | |||
<code> | |||
$ tar xzf archive.tar.gz | |||
$ tar xjf archive.tar.bz2 | |||
</code> | |||
L'estensione dei due file è stata cambiata da ''.tar'' a ''.tar.gz'' e ''.tar.bz2'' per indicare chiaramente con quale tipo di algoritmo sono stati compressi i dati. Esistono versioni compatte delle stesse estensioni: ''.tgz'' equivale a ''.tar.gz'' e ''.tbz'' equivale a ''.tar.bz2''. | |||
<br/> | |||
Nota: l'estensione corretta in realtà non è assolutamente necessaria. Possiamo chiamare tutti gli archivi .tar indipendentemente dalla compressione e questi funzioneranno perfettamente. Tuttavia in questo modo l'utente non ha modo di conoscere a colpo d'occhio l'algoritmo utilizzato. | |||
<br/> | |||
Una opzione basilare interessante è <tt>-t</tt> con la quale possiamo stampare il contenuto di un file compresso. Ad esempio: | |||
<code> | |||
$ tar tzf archive.tar.gz | |||
</coded> | |||
Nel caso in cui l'archivio non sia stato compresso utilizzando ''gzip'' o ''bzip2'' è possibile aggiungervi singoli file o intere directory utilizzando la modalità append attivata dall'opzione <tt>-r</tt>: | |||
<code> | |||
$ tar rf archive.tar file dir/ | |||
</code> | |||
Nota: è importante che l'archivio non sia compresso. Nel caso lo sia è possibile prima eliminare la compressione dall'archivio e poi aggiungere dei file. Alla fine verrà ricompresso il tutto. | |||
==== Esempi ==== | |||
# Comprimere tutte le immagini jpg dentro una directory: | |||
<code> | |||
$ tar cvzf photo.tar.gz photo/*.jpg | |||
</code> | |||
# Come sopra ma il file viene inserito nella directory dove le foto risiedono: | |||
<code> | |||
$ tar cvzf photo/photo.tar.gz photo/*.jpg | |||
</code> | |||
# Comprimere la directory corrente (1): | |||
<code> | |||
$ tar cvjf current.tar.bz2 . | |||
</code> | |||
# Comprimere la directory corrente (2): | |||
<code> | |||
$ tar cvjf current.tar.bz2 * | |||
</code> | |||
Nota: La differenza tra i due comandi precedenti è abbastanza semplice. Nel primo caso ad essere compressa è la reale direcotry corrente. Scompattando l'archivio ci troveremo con una directory che contiene tutti i file. Nel secondo caso invece ad essere compressa non è la directory bensì tutti i file che essa contiene. Scompattando non troveremo una cartella contenente ma tutti i file contenuti nell'archivio saranno copiati nella directory di scompattazione senza che sia creata la subdirectory. | |||
# Copiare una directory: | |||
<code> | |||
$ tar cf - /some/directory | (cd /another/directory && tar xf -) | |||
</code> | |||
# Estrarre tutti i file .h da un archivio: | |||
<code> | |||
$ tar xvzf source.tar.gz *.h | |||
</code> | |||
# Cerca tutti i file .jpeg nella home e crea un archivio: | |||
<code> | |||
$ find ~ -type f -name "*.jpg" | xargs tar cvzf photo.tar.gz | |||
</code> | |||
# Se stiamo cercando di creare un archivio molto grande è più conveniente il seguente metodo: | |||
<code> | |||
$ find ~ -type f -name "*.jpg" | xargs tar rvzf photo.tar.gz | |||
</code> | |||
nel quale abbiamo usato l'opzione append (-r) invece della create (-c). Questo perchè nel caso di archivi molto grandi xargs passa tutti gli argomenti a blocchi e tar ricrea ogni volta l'archivio con solamente i file elencati in quel blocco all'interno. La modalità append risolve il problema. | |||
# Estrarre singoli file da un archivio: | |||
<code> | |||
$ tar xvjf archive.tar.bz2 file1.cpp file2.cpp file3.cpp | |||
</code> | |||
# Estrarre file dalle subdirectory di un archivio: o subdirectory intere: | |||
<code> | |||
$ tar xvjf archive.tar.bz2 subdir1/file1.cpp subdir2/file2.cpp | |||
</code> | |||
# Estrarre una intera subdirectory da un archivio: | |||
<code> | |||
$ tar xvjf archive.tar.bz2 subdir1/ | |||
</code> | |||
Nota: Per poter estrarre singoli file o subdirectory occorre conoscerne con esattezza i nomi. Tuttavia è possibile utilizzare altri comandi come find, grep, awk per ottenere un elenco dei file che vogliamo estrarre. | |||
# Estrarre da un archivio solo i file elencati in un file di testo: | |||
<code> | |||
$ tar xvf archive.tar -T list.txt | |||
</code> | |||
# Importare in un file di testo tutti gli elementi di un archivio: | |||
<code> | |||
$ tar tzf archive.tar.gz > list.txt | |||
</code> | |||
# Eliminare da una directory contenente molti file solo quelli contenuti anche nell'archivio: | |||
<code> | |||
$ tar tzf archive.tar.gz | xargs rm -r | |||
</code> | |||
# Stimare la dimensione di un archivio prima di crearlo: | |||
<code> | |||
$ tar czf - directory/ | wc -c | |||
</code> | |||
=== Modificare l'ora di accesso a un file === | === Modificare l'ora di accesso a un file === |