7z 命令创建 XZ 文件

7z 命令创建 XZ 文件

手册页说 7z 工具支持7z、LZMA2、XZ、ZIP、Zip64、CAB、RAR、ARJ、GZIP、BZIP2、TAR、CPIO、RPM、ISO、大多数文件系统映像和DEB格式。

它说我们可以将类型传递为-t{Type}.下面的命令就成功了。

7z a -tzip archive.zip dir1 dir2 file1 file2

但我无法.xz使用以下命令将文件存档。

7z a -txz archive.zip dir1 dir2 file1 file2
$ 7z a -txz archive.xz dir1 dir2 file1 file2

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_GB.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz (806E9),ASM,AES-NI)

Scanning the drive:
2 folders, 7 files, 196192711 bytes (188 MiB)

Creating archive: archive.xz

Items to compress: 9



System ERROR:
E_INVALIDARG

我在这里做错了什么吗?如何.xz使用命令创建文件7z

编辑: 以下命令成功。

7z a -txz archive archive.tar

这是否意味着我们只能在存档文件上使用-txzor ,-tbzip2因为我们不能在不先存档文件的情况下直接对文件使用压缩?

答案1

与 gzip ( .gz) 和 bzip2 ( .bz2) 类似,但与 zip 和 rar 不同,xz 是一种压缩格式,而不是存档格式。您可以压缩一个文件:

7z a -txz foo.xz foo

这相当于xz foo.

通常,要制作压缩存档,您需要制作 tar 存档并对其进行压缩。您可以使用 7z 制作压缩档案,但据我所知,您无法一步完成:您必须先创建 tar,然后压缩它。 (7z 确实知道如何直接从压缩存档中读取。)您可以在管道中执行此操作。

set -o pipefail
7z a -ttar -so archive.tar.xz dir1 dir2 file1 file2 | 7z a -txz -si archive.tar.xz

据我所知,archive.tar.xz左侧命令被忽略(-so告诉 7z 写入标准输出),但它仍然是必要的。

使用管道时,请注意在 sh 中,如果 tar 创建失败,例如因为无法读取文件,则管道命令不会失败。 Ksh、bash 和 zsh 有一个选项pipefail可以使整个命令失败。

直接调用就简单多了tar。大多数现代 tar 实现可以创建 gz、bz2 和 xz 压缩档案。

tar -cJf archive.tar.xz dir1 dir2 file1 file2

相关内容