Como compactar vários arquivos em um arquivo .xz?


Respostas:


10

Embora, como detalhado por Zacharee1 e por heemayl, seja o que você deseja fazer, outra maneira é canalizar dados tarados para o comando:tar cJf archive files...xz

tar c files... | xz > archive.tar.xz

Como o Ubuntu tarsuporta a Jopção, essa maneira alternativa é especificamente útil quando você deseja passar opções para xz.

Neste exemplo, eu tar e xzip alguns arquivos TIFF com um alto nível de compactação ( -9para xz) e saída detalhada ( vpara tar, -vpara xz):

ek@Io:~/Pictures$ tar vc *.tif{,f} | xz -9v > pics.tar.xz
page001.tif
page002.tif
page003.tif
page004.tif
page9087.tif
page3la.tiff
quux0000.tiff
  100 %       207.3 KiB / 290.0 KiB = 0.715

Obviamente, isso também pode ser feito em duas etapas explicitamente separadas:

ek@Io:~/Pictures$ tar vcf pics.tar *.tif{,f}
page001.tif
page002.tif
page003.tif
page004.tif
page9087.tif
page3la.tiff
quux0000.tiff
ek@Io:~/Pictures$ xz -9v pics.tar
pics.tar (1/1)
  100 %       207.3 KiB / 290.0 KiB = 0.715

Essas duas maneiras não são realmente equivalentes na maneira como operam, embora os .tar.xzarquivos que eles produzem no final devam ser os mesmos (e eram, quando eu o testei).

  • No primeiro, a saída de taré canalizada ( |) para a entrada de xz. xzrecebe dados tarquase imediatamente e nenhum arquivo tar descompactado intermediário é criado. Isso significa que a primeira maneira é essencialmente equivalente atar cJf archive files... , exceto pelos argumentos adicionais passados ​​para xz.
  • No segundo, um arquivo tar não compactado é criado pelo primeiro comando e depois compactado xzno segundo comando. ( xzexclui automaticamente o arquivo original quando terminar, a menos que seja chamado com -k/ --keep.)

Para uma leitura mais aprofundada, consulte este post de Rafael van Horn e as páginas tare xzman.


1
+ 1..this é um bom quando uma mais elevada (ou variação) taxa de compressão é desejada ..
heemayl

2
Olá 2015! Outra forma que você pode realizar diferentes níveis de compressão usando tar -Jé para especificar a variável de ambiente XZ_OPT, tornando a invocação algo como:XZ_OPT="-9v" tar -Jcf out.tar.xz [files]
Wug

2
@ Wug Essa é uma excelente ideia. Parece-me que merece uma resposta separada. Você está disposto a postar isso?
Eliah Kagan 20/09/17

13

Use tarcom a -Jopção:

tar -cvJf images.tar.xz /directory/containing/images/*

tar é usado para combinar vários arquivos em um (arquivo morto) e, em seguida, precisamos compactar o arquivo morto usando o algoritmo de compressão XZ.

De man tar:

-c, --create
       create a new archive
-v, --verbose
       verbosely list files processed
-J, --xz

-f, --file ARCHIVE
       use archive file or device ARCHIVE

Observe também que images.tar.xzserá criado no diretório atual, se você quiser salvá-lo em outro lugar, use /full/path/to/images.tar.xz.


iniciou o processo de xzing de vários PSDs enormes e, para ser sincero, o arquivo está oferecendo uma grande compressão! 400 MB + agora é 200MB
Distant Graphics

1
great..although xzé o mais lento entre xz, gzip, bzip2devido à sua maior taxa de compressão do que a lentidão others..the vale para lidar com se você quiser mais de compressão ..
heemayl

Meus psds no total são, como, 600-900 MB total de xD
Distante Gráficos

você é bom para ir ....
heemayl

algum tipo de erro ._.
Distant Graphics

3

Utilize este comando: tar cJf <archive.tar.xz> <files>. Separe os caminhos de arquivo com um espaço.


você precisa disso:-cfJ
AB

1
@AB: você não precisa -em front..from man tar: A function letter need not be prefixed with ``-''..assim tar cJfé absolutamente OK.
heemayl

@heemayl Mas parece não estar funcionando. Eu tentei sem o '-', mas o alcatrão não está completo.
AB

@ heemayl Isso é o que eu pensava.
precisa saber é o seguinte

1
Note que você deve ficar com sua primeira resposta tar cJf, que daria OP outra maneira de fazer isso como a minha resposta já coberto tar --cvJfem primeiro lugar ..
heemayl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.