用一个命令创建 tar.xz

问题描述 投票:0回答:7

我正在尝试用一个命令创建一个

.tar.xz
压缩存档。具体语法是什么?

我已经尝试过

tar cf - file | xz file.tar.xz
,但不起作用。

compression archive tar xz
7个回答
385
投票

-J
使用
xz
压缩选项。并记住
man tar
:)

tar cfJ <archive.tar.xz> <files>

编辑2015-08-10:

如果您使用破折号

将参数传递给
tar(例如:
tar -cf
而不是
tar cf
),那么
-f
选项必须放在最后
,因为它指定文件名(感谢@A-B-B指出了这一点!)。在这种情况下,命令如下所示:

tar -cJf <archive.tar.xz> <files>

87
投票

Switch

-J
仅适用于较新的系统。通用命令是:

制作 .tar.xz 存档

tar cf - directory/ | xz -z - > directory.tar.xz

解释

  1. tar cf - directory
    读取目录/并开始将其转换为 TAR 格式。此操作的输出在标准输出上生成。

  2. |
    将标准输出通过管道传输到另一个程序的输入...

  3. ...恰好是

    xz -z -
    。 XZ 配置为压缩 (
    -z
    ) 来自标准输入 (
    -
    ) 的存档。

  4. 您将输出从

    xz
    重定向到
    tar.xz
    文件。


47
投票

如果您喜欢管道模式,这是最干净的解决方案:

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


17
投票

快速解决方案

tarxz() { tar cf - "$1" | xz -4e > "$1".tar.xz ; }
tarxz name_of_directory

(注意,不是

name_of_directory/


使用 xz 压缩选项

如果您想对

xz
使用压缩选项,或者在 MacOS 上使用
tar
,您可能需要避免使用
tar -cJf
语法。

根据

man xz
,做法是:

tar cf - filename | xz -4e > filename.tar.xz

因为我喜欢 Wojciech Adam Koszek 的格式,但不喜欢信息:

  1. c
    为指定文件创建新的存档。
  2. f
    从目录中读取(最好放在第二个,因为
    -cf
    !=
    -fc
  3. -
    输出到标准输出
  4. |
    通过管道输出到下一个命令
  5. xz -4e
    使用
    xz
    压缩选项调用
    -4e
    。 (等于
    -4
    --extreme
  6. > 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
的习惯。但是,如果必须的话,从命令行使用这些命令就可以了。


15
投票

我永远记不起哪个存档开关做什么,所以这些天,我更喜欢 tar 的自动检测,用

-a
--auto-compress
开关激活。命令看起来就像这样:

tar caf file.tar.xz file

使用该选项,tar 会根据用于存档的文件扩展名自动推断要使用的格式!它需要 GNU tar 1.20 (2008) 或更高版本(或来自 libarchive 3.1 (2013) 的

bsdtar
和 ulterior)。


4
投票

试试这个:

tar -cf file.tar file-to-compress ; xz -z file.tar

注:

  1. tar.gz 和 tar.xz 不一样; xz 提供更好的压缩。
  2. 不要使用管道
    |
    ,因为这会同时运行命令。使用
    ;
    &
    依次执行命令。

4
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.