Answers:
将-J
压缩选项用于xz
。并记住要man tar
:)
tar cfJ <archive.tar.xz> <files>
编辑2015-08-10:
如果您要tar
使用破折号将参数传递给(例如:tar -cf
,而不是tar cf
),则该-f
选项必须位于最后,因为它指定了文件名(感谢@ABB指出了这一点!)。在这种情况下,命令如下所示:
tar -cJf <archive.tar.xz> <files>
f
,即使没有破折号也要放在最后。
tar
在macOS上似乎支持,-J
但手册页中未提供该功能。不得不在这里查找。尽管他们确实在--options
... 的部分中提到了XZ
切换-J
仅适用于较新的系统。通用命令是:
制作.tar.xz档案
tar cf - directory/ | xz -z - > directory.tar.xz
说明
tar cf - directory
读取目录/并将其开始转换为TAR格式。此操作的输出在标准输出上生成。
|
将标准输出传递到另一个程序的输入...
...恰好是xz -z -
。XZ配置为-z
从标准输入(-
)压缩()存档。
您将输出从重定向xz
到tar.xz
文件。
tar cf - directory/ | xz -z -T0 - > directory.tar.xz
-1 -T0
或-0 -T0
作为选项使用的大小,通常在可比或更快的时间内,与gzip相比,文件大小仍然较小,而默认设置则要-6
慢得多比gzip
如果您喜欢管道模式,这是最干净的解决方案:
tar c some-dir | xz > some-dir.tar.xz
不必f
为了处理文件而放置选项,然后-
用于指定文件为标准输入。也不必指定的-z
选项xz
,因为它是默认选项。
它的工作原理与gzip
和bzip2
太:
tar c some-dir | gzip > some-dir.tar.gz
要么
tar c some-dir | bzip2 > some-dir.tar.bz2
解压缩也非常简单:
xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x
如果只有tar
存档,则可以使用cat
:
cat archive.tar | tar x
如果只需要列出文件,请使用tar t
。
如果要为使用压缩选项xz
,或者tar
在MacOS上使用压缩选项,则可能要避免使用tar -cJf
语法。
根据man xz
,执行此操作的方法是:
tar cf - baz | xz -4e > baz.tar.xz
因为我喜欢Wojciech Adam Koszek的格式,但不喜欢以下信息:
c
为指定的文件创建一个新的存档。 f
从目录中读取(最好放第二个,因为-cf
!= -fc
)-
输出到标准输出|
管道输出到下一个命令xz -4e
xz
使用-4e
压缩选项进行调用。(等于-4
--extreme
)> baz.tar.xz
将压缩的文件定向到 baz.tar.xz
在哪里-4e
,使用您自己的压缩选项。我经常使用-k
到--keep
的原始文件,-9
对于较重的压缩。-z
手动设置xz
为zip,但如果没有其他指示,则默认为zip。
回显Rafael van Horn,以解压缩和解压缩(请参见下面的注释):
xz -dc baz.tar.xz | tar x
注意:与Rafael的答案不同,请使用xz -dc
代替catxz
。如果您使用此脚本进行脚本编写,则文档会建议这样做。最好养成使用-d
或--decompress
代替的习惯unxz
。但是,如果必须的话,可以从命令行使用这些命令。
tar -cJf
在MacOS上不使用语法的任何特殊原因?很好奇,因为我刚才正在这样做,而且似乎正在工作。
试试这个: tar -cf file.tar file-to-compress ; xz -z file.tar
注意:
|
因为这会同时运行命令。一个接一个地使用;
或&
执行命令。J
选项,但这可行。我认为您需要RHEL6。
tar -c file-to-compress | xz -z > file.tar.xz
。
&
不会一个接一个地启动命令。相反,它将启动第一个作为后台进程。
v
到命令开关(tar -cJvf
)会很详细,显示了正在添加到存档中的文件。