我正在尝试用一个命令创建一个
.tar.xz
压缩存档。具体语法是什么?
我已经尝试过
tar cf - file | xz file.tar.xz
,但不起作用。
Switch
-J
仅适用于较新的系统。通用命令是:
制作 .tar.xz 存档
tar cf - directory/ | xz -z - > directory.tar.xz
解释
tar cf - directory
读取目录/并开始将其转换为 TAR 格式。此操作的输出在标准输出上生成。|
将标准输出通过管道传输到另一个程序的输入......恰好是
xz -z -
。 XZ 配置为压缩 (-z
) 来自标准输入 (-
) 的存档。您将输出从
xz
重定向到 tar.xz
文件。如果您喜欢管道模式,这是最干净的解决方案:
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
。
tarxz() { tar cf - "$1" | xz -4e > "$1".tar.xz ; }
tarxz name_of_directory
(注意,不是
name_of_directory/
)
如果您想对
xz
使用压缩选项,或者在 MacOS 上使用 tar
,您可能需要避免使用 tar -cJf
语法。
man xz
,做法是:
tar cf - filename | xz -4e > filename.tar.xz
因为我喜欢 Wojciech Adam Koszek 的格式,但不喜欢信息:
c
为指定文件创建新的存档。f
从目录中读取(最好放在第二个,因为-cf
!=-fc
)-
输出到标准输出|
通过管道输出到下一个命令xz -4e
使用 xz
压缩选项调用 -4e
。 (等于 -4
--extreme
)> filename.tar.xz
将焦油压缩后的文件定向到 filename.tar.xz
其中
-4e
是,使用您自己的压缩选项。
我经常使用 -k
来 --keep
原始文件,并使用 -9
进行真正的重度压缩。 -z
手动将 xz
设置为压缩,但如果没有其他指示,则默认为压缩。
回显Rafael van Horn,解压和解压(见下面的注释):
xz -dc filename.tar.xz | tar x
注意:与 Rafael 的答案不同,使用
xz -dc
而不是 catxz
。如果您使用它来编写脚本,文档建议这样做。最好养成使用 -d
或 --decompress
代替 unxz
的习惯。但是,如果必须的话,从命令行使用这些命令就可以了。
我永远记不起哪个存档开关做什么,所以这些天,我更喜欢 tar 的自动检测,用
-a
或 --auto-compress
开关激活。命令看起来就像这样:
tar caf file.tar.xz file
使用该选项,tar 会根据用于存档的文件扩展名自动推断要使用的格式!它需要 GNU tar 1.20 (2008) 或更高版本(或来自 libarchive 3.1 (2013) 的
bsdtar
和 ulterior)。
试试这个:
tar -cf file.tar file-to-compress ; xz -z file.tar
注:
|
,因为这会同时运行命令。使用 ;
或 &
依次执行命令。tar -I 'xz -9 -T0' -cf <archive.tar.xz> <files>
在这种方法中,您也可以将参数传递给
xz
。您可以根据需要更改参数。 -9
用于压缩级别,-T0
用于使用多个线程。
它还可以与其他压缩工具配合使用,例如
zstd
tar -I 'zstd -18 -T0' -cf <archive.tar.ztd> <files>
此命令仅适用于 gnu-tar。大多数 Linux 发行版都附带了它。在 Mac 中,您可以安装
gtar
https://formulae.brew.sh/formula/gnu-tar