Crea un tar.xz con un comando


159

Sto cercando di creare un .tar.xzarchivio compresso in un solo comando. Qual è la sintassi specifica per questo?

Ho provato tar cf - file | xz file.tar.xz, ma non funziona.

Risposte:


241

Utilizzare l' -Jopzione 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 -cfal contrario di tar cf), allora l' -fopzione 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>

5
aggiungendo val comando switch ( tar -cJvf) per essere dettagliato mostra i file che vengono aggiunti all'archivio.
Stuart Cardall,

7
Dato che l'ordinamento è importante con il trattino, probabilmente è meglio presumere che l'ordinamento sia sempre importante e mettere l' fultimo, anche senza il trattino.
mwfearnley,

1
È possibile passare parametri xz come -e (--extended)? Apparentemente non userà esteso per impostazione predefinita.
chmike,

3
tarsu macOS sembra supportare -Jma la funzionalità non è indicata nella pagina man. Ho dovuto cercare qui. Anche se citano XZ nella sezione su --options...
cbarrick,

1
@chmike Usa la variabile di ambiente XZ_OPT. Ad esempio XZ_OPT = "- 9e -T0".
Dzenly

50

Switch -Jfunziona solo su sistemi più recenti. Il comando universale è:

Per fare l'archivio .tar.xz

tar cf - directory/ | xz -z - > directory.tar.xz

Spiegazione

  1. tar cf - directorylegge directory / e inizia a metterlo in formato TAR. L'output di questa operazione viene generato sull'output standard.

  2. | convoglia l'output standard all'ingresso di un altro programma ...

  3. ... che sembra essere xz -z -. XZ è configurato per comprimere ( -z) l'archivio dallo standard input ( -).

  4. Si reindirizza l'output da xzal tar.xzfile.


16
-fnon 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.
Eliah Kagan,

@EliahKagan Risolto. Grazie.
Wojciech Adam Koszek,

2
Per utilizzare la compressione multithread è possibile utilizzare l'opzione -T0:tar cf - directory/ | xz -z -T0 - > directory.tar.xz
oidualc

Un altro vantaggio è che puoi facilmente specificare il livello di compressione o qualsiasi altra opzione su xz sulla riga di comando. Ad esempio, se vuoi accelerare la compressione e non ti interessa molto della dimensione che puoi utilizzare -1 -T0o -0 -T0come 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.
fgwaller,

38

Se ti piace la modalità pipe, questa è la soluzione più pulita:

tar c some-dir | xz > some-dir.tar.xz

Non è necessario inserire l' fopzione per gestire i file e quindi utilizzare -per specificare che il file è l'input standard. Inoltre, non è necessario specificare l' -zopzione per xz, poiché è predefinita.

Funziona con gzipe bzip2troppo:

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 tararchivio, puoi usare cat:

cat archive.tar | tar x

Se è necessario elencare solo i file, utilizzare tar t.


8

Utilizzo delle opzioni di compressione xz

Se vuoi usare le opzioni di compressione per xz, o se stai usando tarsu MacOS, probabilmente vuoi evitare la tar -cJfsintassi.

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:

  1. c crea un nuovo archivio per i file specificati.
  2. flegge da una directory (meglio inserire questo secondo perché -cf! = -fc)
  3. - uscite allo standard output
  4. | pipe in uscita al comando successivo
  5. xz -4echiama xzcon l' -4eopzione di compressione. (uguale a -4 --extreme)
  6. > baz.tar.xz indirizza il file tarred e compresso a baz.tar.xz

dov'è -4e, usa le tue opzioni di compressione. Io uso spesso -kper --keepil file originale e -9per la compressione davvero pesante. -zimpostare manualmente xzsu zip, anche se per impostazione predefinita è zippato se non diversamente indicato.

Per decomprimere e decomprimere

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 -dcinvece di catxz. I documenti lo raccomandano nel caso in cui lo stiate usando per lo scripting. Meglio avere l'abitudine di usare -do --decompressinvece di unxzpure. Tuttavia, se è necessario, utilizzare tali comandi dalla riga di comando va bene.


Qualche motivo particolare per non usare la tar -cJfsintassi su MacOS? Solo curioso, perché lo stavo facendo proprio ora e sembrava funzionare.
Lo-Tan,

2
@ Lo-Tan Funziona se hai il catrame. Quando lo usavo non avevo la versione giusta di tar, quindi non ha funzionato per me. Volevo anche usare le opzioni di compressione per xz, cosa che non puoi fare se usi tar. Inoltre, la sintassi delle tubazioni è più facile da ricordare per me, quindi tendo a usarla. Ma a ciascuno il proprio
Connor

4

Prova questo: tar -cf file.tar file-to-compress ; xz -z file.tar

Nota:

  1. tar.gz e tar.xz non sono gli stessi; xz fornisce una migliore compressione.
  2. Non usare pipe | perché eseguono comandi contemporaneamente. L'uso ;o l' &esecuzione di comandi uno dopo l'altro.

+1 Su RHEL 5.10, non vedo Jun'opzione, ma funziona. Penso che tu abbia bisogno di RHEL6.
Brian

2
Perché non regolare i comandi per convogliare l'output da tar a xz?
mwfearnley,

@mwfearnley Penso che la nota sia semplicemente per enfatizzare che i comandi dovevano essere eseguiti in sequenza. Poiché il nome del file viene utilizzato in entrambi i comandi, non scriveranno né leggeranno i dati dall'output o dall'input standard. Se si utilizza il comando senza specificare il nome file, possono essere concatenati, come tar -c file-to-compress | xz -z > file.tar.xz.
Jack Q,

L'uso &non avvierà un comando uno dopo l'altro. Invece, lancerà il primo come processo in background.
Luis Lavaire,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.