在一个命令中创建tar.xz

Geo*_* K. 127 compression tar archive xz

我试图.tar.xz在一个命令中创建一个压缩存档.具体的语法是什么?

我试过了tar cf - file | xz file.tar.xz,但那不起作用.

小智 203

使用-J压缩选项xz.并记得man tar:)

tar cfJ <archive.tar.xz> <files>
Run Code Online (Sandbox Code Playgroud)

编辑2015-08-10:

如果你将参数传递给tar 破折号(例如:tar -cf相反tar cf),那么该-f选项必须是最后一个,因为它指定了文件名(感谢@ABB指出它!).在这种情况下,命令看起来像:

tar -cJf <archive.tar.xz> <files>
Run Code Online (Sandbox Code Playgroud)

  • 鉴于顺序对于破折号很重要,最好假设排序总是很重要,并且将`f`放在最后,即使没有破折号也是如此. (6认同)
  • @chmike使用XZ_OPT环境变量。例如 XZ_OPT="-9e -T0"。 (4认同)
  • 将`v`添加到命令开关(`tar -cJvf`)是详细的,显示要添加到存档的文件. (3认同)
  • macOS上的`tar`似乎支持`-J`,但手册页中未提供该功能。不得不在这里查找。尽管他们确实在`--options'部分提到了XZ ... (3认同)
  • 是否可以传递像 -e (--extended) 这样的 xz 参数?显然它不会默认使用扩展。 (2认同)

小智 39

Switch -J仅适用于较新的系统.普遍命令是:

制作.tar.xz存档

tar cf - directory/ | xz -z - > directory.tar.xz
Run Code Online (Sandbox Code Playgroud)

说明

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

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

  3. ......恰好是xz -zf -.XZ配置为-z从file(-f)创建()恰好是标准输入(-)的存档.

  4. 您将输出重定向xztar.xz文件.

  • 传递给`xz`时,`-f`并不意味着"来自文件".相反,它是`--force`的缩写(参见[xz(1)](http://linux.die.net/man/1/xz)以获取详细信息),除非需要,否则最好不要使用它. (14认同)
  • 要使用多线程压缩,可以使用-T0选项:`tar cf-directory / | xz -z -T0-&gt; directory.tar.xz` (2认同)
  • 另一个优点是您可以轻松地在命令行上指定压缩级别或 xz 的任何其他选项。例如,如果您想加快压缩速度并且不太关心大小,您可以使用“-1 -T0”或“-0 -T0”作为选项,这通常仍然会为您提供比 gzip 更小的文件相当或更快的时间,而默认的“-6”比 gzip 慢得多。 (2认同)

小智 32

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

tar c some-dir | xz > some-dir.tar.xz
Run Code Online (Sandbox Code Playgroud)

没有必要使用该f选项来处理文件,然后-用于指定文件是标准输入.也没有必要为其指定-z选项xz,因为它是默认选项.

它的工作原理与gzipbzip2太:

tar c some-dir | gzip > some-dir.tar.gz
Run Code Online (Sandbox Code Playgroud)

要么

tar c some-dir | bzip2 > some-dir.tar.bz2
Run Code Online (Sandbox Code Playgroud)

解压缩也很简单:

xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x
Run Code Online (Sandbox Code Playgroud)

如果您只有tar存档,则可以使用cat:

cat archive.tar | tar x
Run Code Online (Sandbox Code Playgroud)

如果您只需要列出文件,请使用tar t.


cod*_*ing 11

我永远记不起哪个存档开关做了什么,所以现在,我更喜欢较新的 tar 版本(-a--auto-compress)中的“自动压缩”功能。该命令看起来就像这样:

tar caf file.tar.xz file
Run Code Online (Sandbox Code Playgroud)

使用 -a 选项,tar 会从用于存档的文件结尾自动推断要使用的压缩!


Con*_*nor 5

使用xz压缩选项

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

根据man xz,执行此操作的方法是:

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

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

  1. c 为指定的文件创建一个新的存档。
  2. f从目录中读取(最好放第二个,因为-cf!= -fc
  3. - 输出到标准输出
  4. | 管道输出到下一个命令
  5. xz -4exz使用-4e压缩选项进行调用。(等于-4 --extreme
  6. > baz.tar.xz 将压缩和压缩的文件定向到 baz.tar.xz

在哪里-4e,使用您自己的压缩选项。我经常使用-k--keep的原始文件,-9对于较重的压缩。-z手动设置xz为zip,但如果没有其他指示,则默认为zip。

解压和解压

回显Rafael van Horn,以解压缩和解压缩(请参见下面的注释):

xz -dc baz.tar.xz | tar x
Run Code Online (Sandbox Code Playgroud)

注意:与Rafael的答案不同,请使用xz -dc代替catxz。如果您使用此脚本进行脚本编写,则文档会建议这样做。最好养成使用-d--decompress代替的习惯unxz。但是,如果必须的话,可以从命令行使用这些命令。

  • @Lo-Tan 如果你有焦油就可以了。当我使用它时,我没有正确版本的 tar,所以它对我不起作用。我还想使用 xz 的压缩选项,如果使用 tar,则无法执行此操作。此外,管道语法对我来说更容易记住,所以我倾向于使用它。但对每个人来说 (2认同)