risposta-alla-domanda-sullo-sviluppo-web-bd.com

Comprimere una cartella con tar?

Sto cercando di comprimere una cartella (/var/www/) per ~/www_backups/$time.tar dove $time è la data corrente.

Questo è quello che ho:

cd /var/www && Sudo tar -czf ~/www_backups $time"

Sono completamente perso e ci sono stato per ore ormai. Non so se -czf è corretto. Voglio semplicemente copiare tutto il contenuto in /var/www in un $time.tar file e desidero mantenere le autorizzazioni per tutti i file. Qualcuno mi può aiutare?

298
qwerty

Per tar e gzip una cartella, la sintassi è:

tar czf name_of_archive_file.tar.gz name_of_directory_to_tar

Il - è facoltativo. Se vuoi tar la directory corrente, usa . per designarlo.

Per costruire il tuo nome file, usa l'utilità date (guarda la sua pagina man per le opzioni di formato disponibili). Per esempio:

cd /var/www && Sudo tar czf ~/www_backups/$(date +%Y%m%d-%H%M%S).tar.gz .

Ciò avrebbe creato un file chiamato qualcosa come 20120902-185558.tar.gz.

Su Linux, è probabile che tar supporti anche la compressione BZip2 con l'opzione j anziché z. E forse altri. Controlla la pagina man sul tuo sistema locale.

412
Mat

Esempi per gli algoritmi di compressione più comuni

Il titolo della domanda per questo è semplicemente "Comprimere una cartella con tar?" Poiché questo titolo è molto generale, ma la domanda e la risposta sono molto più specifiche e, a causa dell'elevato numero di visualizzazioni che questa domanda ha attirato, ho ritenuto utile aggiungere un elenco aggiornato di esempi di entrambi archiviazione/compressione ed estrazione/decompressione, con vari algoritmi di compressione comunemente usati.

Questi sono stati testati con Ubuntu 18.04.4. Sono molto semplici per l'uso generale, ma potrebbero essere facilmente integrati nei contenuti delle domande più specifiche del PO utilizzando le tecniche nella risposta accettata e i commenti utili sopra.

Una cosa da notare per il pubblico più generale è che tar non aggiungerà le estensioni necessarie (come .tar.gz) automaticamente - l'utente deve aggiungere esplicitamente quelli, come si vede nei comandi seguenti:

# 1: tar (create uncompressed archive) all files and directories in the current working directory recursively into an uncompressed tarball
tar cvf filename.tar *

# 2: Untar (extract uncompressed archive) all files and directories in an uncompressed tarball recursively into the current working directory
tar xvf filename.tar

# 3: tar (create gzipped archive) all files and directories in the current working directory recursively into a tarball compressed with gzip
tar cvzf filename.tar.gz *

# 4: Untar (extract gzipped archive) all files and directories in a tarball compressed with gzip recursively into the current working directory
tar xvf filename.tar.gz # Note: same options as 2 above

# 5: tar (create bzip2'ed archive) all files and directories in the current working directory recursively into a tarball compressed with bzip2
tar cvjf filename.tar.bz2 * # Note: little 'j' in options

# 6: Untar (extract bzip2'ed archive) all files and directories in an tarball compressed with bzip2 recursively into the current working directory
tar xvf filename.tar.bz2 # Note: same options as 2 and 4 above

# 7: tar (create xz'ed archive) all files and directories in the current working directory recursively into a tarball compressed with xz
tar cvJf filename.tar.xz * # Note: capital 'J' in options

# 8: Untar (extract xz'ed archive) all files and directories in an tarball compressed with xz recursively into the current working directory
tar xvf filename.tar.xz # Note: same options as 2, 4, and 6 above

Vedi tar pagina man (meglio usare man tar sulla tua macchina specifica) per ulteriori dettagli. Di seguito riassumo le opzioni utilizzate sopra direttamente dalla pagina man:

-c, --create
Crea un nuovo archivio

-x, --extract, --get
Estrae i file da un archivio

-v, --verbose
Elenca in modo dettagliato i file elaborati

-z, --gzip
Filtra l'archivio tramite gzip

-j, --bzip2
Filtra l'archivio tramite bzip2

-J, --xz
Filtra l'archivio tramite xz

-f, --file = ARCHIVIO
Usa il file di archivio o l'ARCHIVIO del dispositivo

Non è necessario aggiungere il - davanti alle opzioni combinate o = segno tra l'opzione f e il nome file.

Ho ottenuto tutto questo dal mio recente articolo , che sarà ulteriormente ampliato in un articolo molto più completo man mano che avrò tempo di lavorarci su.

3
Xitalogy