206

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

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

4

6 回答 6

325

使用-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>
于 2013-09-17T17:12:34.137 回答
66

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

制作 .tar.xz 存档

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

解释

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

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

  3. ...恰好是xz -z -。XZ 配置为-z从标准输入 ( -) 压缩 ( ) 存档。

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

于 2014-07-10T00:31:46.463 回答
45

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

tar c some-dir | xz > some-dir.tar.xz

不必f为了处理文件而放置选项,然后使用-来指定文件是标准输入。也没有必要为 指定-z选项xz,因为它是默认选项。

它也适用gzipbzip2

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.

于 2015-01-05T18:11:02.583 回答
13

快速解决方案

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

(注意,不是name_of_directory/


使用 xz 压缩选项

如果您想对 使用压缩选项xz,或者如果您tar在 MacOS 上使用,您可能希望避免使用该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 -4exz使用-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's answer不同,使用xz -dc代替catxz. 如果您将其用于脚本编写,文档建议这样做。最好有使用-dor--decompress代替的习惯unxz。但是,如果必须,可以从命令行使用这些命令。

于 2018-05-03T15:40:46.867 回答
2

尝试这个: tar -cf file.tar file-to-compress ; xz -z file.tar

笔记:

  1. tar.gz 和 tar.xz 不一样;xz 提供更好的压缩。
  2. 不要使用管道| ,因为它会同时运行命令。一个接一个地使用;&执行命令。
于 2014-03-10T13:03:25.893 回答
2

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

tar caf file.tar.xz file

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

于 2021-12-03T08:01:38.503 回答