我们可以使用 pigz 和 --zip 来以单一 zip 兼容格式压缩多个文件吗?

我们可以使用 pigz 和 --zip 来以单一 zip 兼容格式压缩多个文件吗?

我正在尝试找出一种使用并行压缩来压缩文件的方法pigz,但到现在还没有找到方法。

我有一个选择是使用 zip 文件/目录,zip -r -0然后再次使用pigz -K -f,但它会在 zip 中创建一个 zip。

我偶然发现了一个被点赞的答案这里这似乎是一个解决方案,但具有无效的zip语法pigz

pigz -K -k archive.zip bigfile txt

我不认为pigz需要将 zip 文件名作为参数,然后我们就可以指定要 zip 的文件。

答案1

我不认为pigz需要将 zip 文件名作为参数,然后我们就可以指定要 zip 的文件。

看来你是对的。


我们可以使用pigzwith--zip以单一 zip 兼容格式压缩多个文件吗?

可能不是;或者现在还不是(将来可能会添加新功能,尽管添加这个特定功能可能不是正确的事情;继续阅读)。我找不到这样做的方法。您需要先将文件放入单个存档中,然后压缩。

这是有原因的。根据 Unix 哲学,程序应该遵循“只做一件事,做好它”的规则。将一个或多个文件(目录也是文件) 是一回事,我们称之为“归档”。减小大小是另一回事,我们称之为“压缩”。我们有归档器,常见的是tar,POSIX 的是pax;我们还有压缩器:gzipcompressbzip2lzma, ……

一些压缩器和压缩文件格式支持存储多个文件,因为它们的作者显然没有受到 Unix 哲学的启发。:)

但这不仅仅是一个哲学问题,还有实际优势:

  • 您可以将任何归档器与任何压缩器一起使用。特别是,您可以选择另一个(例如更好的)压缩器,同时仍然使用您最熟悉的归档器(可能是 GNU tar)。同时工作的工具往往会为常见的归档任务发明自己的选项和规则。
  • 如果文件系统引入了新功能,那么我们只需要升级我们的归档器。
  • 如果你发明了一种新的压缩方法,那么你将能够开发一种新的压缩器,而不必关注如何遍历目录树、读取哪些元数据或哪个角色应该 单独的路径名组件

pigz是一个压缩器,似乎无意成为归档器。使用--zip/-K它使用.zip 格式与旨在用作压缩器和归档器的工具相关联。pigz不必使用该格式的所有功能,尤其是存储多个文件的能力。它可以“改进”,但现在你知道我为什么认为这不是正确的事情。

仍在存档--压缩是一种非常常见的用例。一个好的归档器应该能够写入其标准输出。一个好的压缩器应该能够从其标准输入读取。然后您可以在管道中使用它们。这是一种通用方法。

具体来说,tar您可以使用一个开关,使工具通过压缩器过滤(管道)存档:-zfor gzip--lzmaforlzma等。通用开关是-I,它允许您使用风俗压缩机。压缩机可以是pigz --zip

tar -cv -I 'pigz --zip' -f archive.tar.zip file1 file2 file3

可以使用相同的压缩器来解包,只要它支持-dpigz即可):

tar -xv -I 'pigz --zip' -f archive.tar.zip

从技术上讲,这archive.tar.zip是一个 zip 文件,里面有一个 tar 文件,因此它类似于“zip 内含 zip”。如果您执行unzip此操作,那么您将获得一个名为 的 tar 存档-。不过,上述tar命令可以即时运行(不会创建中间文件)。

这就是在 Linux/Unix 中执行的操作。

相关内容