Guida ai comandi da terminale: differenze tra le versioni

Riga 561: Riga 561:
==== Esempi ====
==== Esempi ====


# Comprimere tutte le immagini jpg dentro una directory:
* Comprimere tutte le immagini jpg dentro una directory:
<code>
<code>
$ tar cvzf photo.tar.gz photo/*.jpg
$ tar cvzf photo.tar.gz photo/*.jpg
</code>
</code>


# Come sopra ma il file viene inserito nella directory dove le foto risiedono:
* Come sopra ma il file viene inserito nella directory dove le foto risiedono:
<code>
<code>
$ tar cvzf photo/photo.tar.gz photo/*.jpg
$ tar cvzf photo/photo.tar.gz photo/*.jpg
</code>
</code>


# Comprimere la directory corrente (1):
* Comprimere la directory corrente (1):
<code>
<code>
$ tar cvjf current.tar.bz2 .
$ tar cvjf current.tar.bz2 .
</code>
</code>


# Comprimere la directory corrente (2):
* Comprimere la directory corrente (2):
<code>
<code>
$ tar cvjf current.tar.bz2 *
$ tar cvjf current.tar.bz2 *
</code>
</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.
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:
* Copiare una directory:
<code>
<code>
$ tar cf - /some/directory | (cd /another/directory && tar  xf -)
$ tar cf - /some/directory | (cd /another/directory && tar  xf -)
</code>
</code>


# Estrarre tutti i file .h da un archivio:
* Estrarre tutti i file .h da un archivio:
<code>
<code>
$ tar xvzf source.tar.gz *.h
$ tar xvzf source.tar.gz *.h
</code>
</code>


# Cerca tutti i file .jpeg nella home e crea un archivio:
* Cerca tutti i file .jpeg nella home e crea un archivio:
<code>
<code>
$ find ~ -type f -name "*.jpg" | xargs tar cvzf photo.tar.gz
$ find ~ -type f -name "*.jpg" | xargs tar cvzf photo.tar.gz
</code>
</code>


# Se stiamo cercando di creare un archivio molto grande è più conveniente il seguente metodo:
* Se stiamo cercando di creare un archivio molto grande è più conveniente il seguente metodo:
<code>
<code>
$ find ~ -type f -name "*.jpg" | xargs tar rvzf photo.tar.gz
$ find ~ -type f -name "*.jpg" | xargs tar rvzf photo.tar.gz
Riga 604: Riga 603:
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.
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:
* Estrarre singoli file da un archivio:
<code>
<code>
$ tar xvjf archive.tar.bz2 file1.cpp file2.cpp file3.cpp
$ tar xvjf archive.tar.bz2 file1.cpp file2.cpp file3.cpp
</code>
</code>


# Estrarre file dalle subdirectory di un archivio: o subdirectory intere:
* Estrarre file dalle subdirectory di un archivio: o subdirectory intere:
<code>
<code>
$ tar xvjf archive.tar.bz2 subdir1/file1.cpp subdir2/file2.cpp
$ tar xvjf archive.tar.bz2 subdir1/file1.cpp subdir2/file2.cpp
</code>
</code>


# Estrarre una intera subdirectory da un archivio:
* Estrarre una intera subdirectory da un archivio:
<code>
<code>
$ tar xvjf archive.tar.bz2 subdir1/
$ tar xvjf archive.tar.bz2 subdir1/
Riga 620: Riga 619:
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.
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:
* Estrarre da un archivio solo i file elencati in un file di testo:
<code>
<code>
$ tar xvf archive.tar -T list.txt
$ tar xvf archive.tar -T list.txt
</code>
</code>


# Importare in un file di testo tutti gli elementi di un archivio:
* Importare in un file di testo tutti gli elementi di un archivio:
<code>
<code>
$ tar tzf archive.tar.gz > list.txt
$ tar tzf archive.tar.gz > list.txt
</code>
</code>


# Eliminare da una directory contenente molti file solo quelli contenuti anche nell'archivio:
* Eliminare da una directory contenente molti file solo quelli contenuti anche nell'archivio:
<code>
<code>
$ tar tzf archive.tar.gz | xargs rm -r
$ tar tzf archive.tar.gz | xargs rm -r
</code>
</code>


# Stimare la dimensione di un archivio prima di crearlo:
* Stimare la dimensione di un archivio prima di crearlo:
<code>
<code>
$ tar czf - directory/ | wc -c
$ tar czf - directory/ | wc -c
</code>
</code>
''(Grazie a [http://nerotux.tuxfamily.org Nerotux] per gli esempi sull'utilizzo di tar)''


=== Modificare l'ora di accesso a un file ===
=== Modificare l'ora di accesso a un file ===