如何将多个文件压缩到.xz存档中?


Answers:


10

尽管如由Zacharee1详细介绍,并通过heemayl通常是你想做的事,另一种方式是管道柏油数据的命令:tar cJf archive files...xz

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

由于Ubuntu tar支持该J选项,因此当您希望将选项传递给时,这种替代方法特别有用xz

在此示例中,我压缩并压缩了一些TIFF文件,这些TIFF文件具有较高的压缩率(-9to xz)和详细输出(vto tar-vto 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

当然,这也可以通过两个明确分开的步骤来完成:

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

尽管最后.tar.xz生成的文件应该是相同的(并且在我测试时是相同的),但这两种方式实际上在操作方式上并不等效。

  • 在第一个中,输出tar就是管道|)到输入xz。几乎立即xz接收到数据tar,并且从未创建任何中间未压缩的tar文件。这是说,第一种方式是本质上等同tar cJf archive files...,除了传递给其他参数xz
  • 在第二个命令中,第一个命令创建了未压缩的tar归档文件,然后xz在第二个命令中对其进行了压缩。(完成后会xz自动删除原始文件,除非使用-k/ 调用--keep。)

有关更多阅读,请参阅Rafael van Horn的这篇文章以及tarand xz手册。


1
+ 1..this是当更高(或变化的)压缩比所需的一个很好的一个..
heemayl

2
您好2015!您可以使用来完成不同压缩级别的另一种方法tar -J是指定环境变量XZ_OPT,使调用类似:XZ_OPT="-9v" tar -Jcf out.tar.xz [files]
Wug

2
@Wug这是一个好主意。在我看来,它有自己单独的答案。您愿意张贴吗?
伊莱亚·卡根

13

tar-J选项一起使用:

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

tar 用于将多个文件合并为一个文件(存档),然后我们需要使用XZ压缩算法压缩档案。

来自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

还要注意images.tar.xz,如果要保存到其他目录,将在当前目录中创建该目录/full/path/to/images.tar.xz


开始对几个大的PSD进行压缩的过程,老实说,该档案库提供了一些巨大的压缩功能!400 MB +现在是200MB
Distant Graphics

1
great..although xz是其中最慢的xzgzipbzip2起因于others..the缓慢的更高的压缩比是值得对付,如果你想要更多的压缩..
heemayl

我的psds总数总计为600-900 MB xD
Distant Graphics'Aug

你是好去....
heemayl

有点错误._。
Distant Graphics

3

使用此命令:tar cJf <archive.tar.xz> <files>。用空格分隔文件路径。


您需要此:-cfJ
AB

1
@AB:您不需要-在前面..from man tarA function letter need not be prefixed with ``-''..so tar cJf绝对可以。
heemayl 2015年

@heemayl但是它似乎不起作用。我尝试了不带'-'的代码,但tar尚未完成。
AB

@heemayl我就是这么想的。
TheWanderer 2015年

1
请注意,你应该与你的第一个答案棒tar cJf,将给予OP做这个作为我的答案已经覆盖的另一种方式tar --cvJf,在第一..
heemayl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.