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

10

Quero compactar várias imagens em um arquivo .xz. Como faço isso?

Gráficos distantes
fonte

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.

Eliah Kagan
fonte
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.

heemail
fonte
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.

O andarilho
fonte
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