Risposte:
Utilizzare l' -J
opzione di compressione per xz
. E ricorda di man tar
:)
tar cfJ <archive.tar.xz> <files>
Modifica 10-08-2015:
Se stai passando gli argomenti tar
con trattini (es: tar -cf
al contrario di tar cf
), allora l' -f
opzione deve arrivare per ultima , poiché specifica il nome del file (grazie a @ABB per averlo sottolineato!). In tal caso, il comando appare come:
tar -cJf <archive.tar.xz> <files>
f
ultimo, anche senza il trattino.
tar
su macOS sembra supportare -J
ma la funzionalità non è indicata nella pagina man. Ho dovuto cercare qui. Anche se citano XZ nella sezione su --options
...
Switch -J
funziona solo su sistemi più recenti. Il comando universale è:
Per fare l'archivio .tar.xz
tar cf - directory/ | xz -z - > directory.tar.xz
Spiegazione
tar cf - directory
legge directory / e inizia a metterlo in formato TAR. L'output di questa operazione viene generato sull'output standard.
|
convoglia l'output standard all'ingresso di un altro programma ...
... che sembra essere xz -z -
. XZ è configurato per comprimere ( -z
) l'archivio dallo standard input ( -
).
Si reindirizza l'output da xz
al tar.xz
file.
-f
non significa "dal file" quando passato a xz
. Invece è l'abbreviazione di --force
(vedi xz (1) per i dettagli), e non è meglio usarlo se non necessario.
tar cf - directory/ | xz -z -T0 - > directory.tar.xz
-1 -T0
o -0 -T0
come opzioni, che di solito ti darà comunque un file più piccolo di gzip in un tempo comparabile o più veloce, mentre l'impostazione predefinita -6
è considerevolmente più lenta di gzip.
Se ti piace la modalità pipe, questa è la soluzione più pulita:
tar c some-dir | xz > some-dir.tar.xz
Non è necessario inserire l' f
opzione per gestire i file e quindi utilizzare -
per specificare che il file è l'input standard. Inoltre, non è necessario specificare l' -z
opzione per xz
, poiché è predefinita.
Funziona con gzip
e bzip2
troppo:
tar c some-dir | gzip > some-dir.tar.gz
o
tar c some-dir | bzip2 > some-dir.tar.bz2
Anche il decompressione è abbastanza semplice:
xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x
Se hai solo un tar
archivio, puoi usare cat
:
cat archive.tar | tar x
Se è necessario elencare solo i file, utilizzare tar t
.
Se vuoi usare le opzioni di compressione per xz
, o se stai usando tar
su MacOS, probabilmente vuoi evitare la tar -cJf
sintassi.
Secondo man xz
, il modo per farlo è:
tar cf - baz | xz -4e > baz.tar.xz
Perché mi è piaciuto il formato di Wojciech Adam Koszek , ma non le informazioni:
c
crea un nuovo archivio per i file specificati. f
legge da una directory (meglio inserire questo secondo perché -cf
! = -fc
)-
uscite allo standard output|
pipe in uscita al comando successivoxz -4e
chiama xz
con l' -4e
opzione di compressione. (uguale a -4
--extreme
)> baz.tar.xz
indirizza il file tarred e compresso a baz.tar.xz
dov'è -4e
, usa le tue opzioni di compressione. Io uso spesso -k
per --keep
il file originale e -9
per la compressione davvero pesante. -z
impostare manualmente xz
su zip, anche se per impostazione predefinita è zippato se non diversamente indicato.
Per fare eco a Rafael van Horn , per decomprimere e annullare (vedi nota sotto):
xz -dc baz.tar.xz | tar x
Nota: a differenza della risposta di Rafael , utilizzare xz -dc
invece di catxz
. I documenti lo raccomandano nel caso in cui lo stiate usando per lo scripting. Meglio avere l'abitudine di usare -d
o --decompress
invece di unxz
pure. Tuttavia, se è necessario, utilizzare tali comandi dalla riga di comando va bene.
tar -cJf
sintassi su MacOS? Solo curioso, perché lo stavo facendo proprio ora e sembrava funzionare.
Prova questo: tar -cf file.tar file-to-compress ; xz -z file.tar
Nota:
|
perché eseguono comandi contemporaneamente. L'uso ;
o l' &
esecuzione di comandi uno dopo l'altro.J
un'opzione, ma funziona. Penso che tu abbia bisogno di RHEL6.
tar -c file-to-compress | xz -z > file.tar.xz
.
&
non avvierà un comando uno dopo l'altro. Invece, lancerà il primo come processo in background.
v
al comando switch (tar -cJvf
) per essere dettagliato mostra i file che vengono aggiunti all'archivio.