我可以在 OSX 10.10.3 上使用 lzma 压缩而不使用“tar”吗?

我可以在 OSX 10.10.3 上使用 lzma 压缩而不使用“tar”吗?

我可以创建使用 LZMA 压缩的 tar 文件,如下所示:

$ ls ./DbDumps
alpha.dmp
beta.dmp
delta.dmp
$ XZ_OPT=-9 tar cJf dbDumps.tar.xz DbDumps

但是,我真正想做的(但不能)是压缩每个单独的文件,然后创建 tar 文件。例如:

$ cd DbDumps
$ xz.exe *dmp
$ cd ..
$ tar cf dbDumps.tar DbDumps

我应该调查 HomeBrew 吗? XZ.pkg?

其实早在十月份www.aeyoun.com声称 Yosemite 除了通过 tar 之外,不支持 *.xz 文件压缩。它是否正确?也许“*xz”是可行的,但苹果只是不会说“这是正式支持的”?

答案1

当然可以。首先,tar 在大多数情况下不包括压缩,它将其交给助手(如果它支持的话)。最初,该帮助程序是压缩(.tar.Z)。我还见过 gzip(.tar.gz 或 .tgz)、bzip2(.tar.bz2)、infozip 的压缩和解压缩工具(.tar.zip),还有一些我不记得(.tar.lha、 .tar.lhz、.tar.zoo、tar.bz、tar.z)。所有这些都使用与 tar 分开的压缩。因此,最简单的方法就是找到 xz 二进制文件的路径(它将被称为 xz 而不是 xz.exe)。如果系统上尚未安装它,最简单的方法是从第三方存储库(如 macports)安装它。如果一切都失败了,你总是可以从源代码安装(尽管我无法想象它会发展到这个地步)。

答案2

如果您正在寻找存档中的“按文件”压缩,则可以使用 .zip 作为容器格式。虽然 zip 格式最常用于 Deflate(与 zlib 和 gzip 使用的压缩方法相同),但它确实支持其他几种方法,例如 Deflate64、BZip2、PPMd 和 LZMA。所有这些(以及更多)都是邮编应用程序注释由 PKWare(由 zip 标准的发明者 Phil Katz 创立的公司)出版。

LZMA 很有趣,因为它基本上与 XZ 中的压缩方法相同(好吧,从技术上讲,现在 XZ 默认为 LZMA2,但版本 2 的优点与压缩大小或速度无关)。

现在,Apple 就是 Apple,他们在标准压缩工具(如 Archive Utility 和同上)中不包含除 Deflate 方法以外的任何内容(尽管 LZMA 自那时起就已成为规范的一部分)2006年)。事实上,他们甚至限制了捆绑的 Infozip 工具,因此他们也只有 Deflate(尽管这些相同的工具确实支持其他平台上更好的方法)。

但是,最近的 macOS 包含带有 zipfile、bz2 和 lzma 模块的 Python 3.8.2,因此您可以在 macOS 上使用 bzip2 或 lzma 方法开箱即用地打开 zip。

如果您无法编写一些 Python 脚本,还有更简单的方法。Python 提供了一个命令行界面来操作 zip。该界面默认使用 Deflate 进行压缩,但非常小黑客将更改此默认值:

echo '#!/usr/bin/python3' |\
cat - /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/Current/lib/python*/zipfile.py |\
sed '/zf\.write/s/DEFLATED/LZMA/' > ziplzma
chmod +x ziplzma

您现在可以使用该脚本及其正常选项,但它将默认使用 LZMA 进行压缩。

./ziplzma -c dbDumps.zip DbDumps

运行./ziplzma -h以获得更多选择。

相关内容