我正在尝试找出一种使用并行压缩来压缩文件的方法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 的文件。
看来你是对的。
我们可以使用
pigz
with--zip
以单一 zip 兼容格式压缩多个文件吗?
可能不是;或者现在还不是(将来可能会添加新功能,尽管添加这个特定功能可能不是正确的事情;继续阅读)。我找不到这样做的方法。您需要先将文件放入单个存档中,然后压缩。
这是有原因的。根据 Unix 哲学,程序应该遵循“只做一件事,做好它”的规则。将一个或多个文件(目录也是文件) 是一回事,我们称之为“归档”。减小大小是另一回事,我们称之为“压缩”。我们有归档器,常见的是tar
,POSIX 的是pax
;我们还有压缩器:gzip
,compress
,bzip2
,lzma
, ……
一些压缩器和压缩文件格式支持存储多个文件,因为它们的作者显然没有受到 Unix 哲学的启发。:)
但这不仅仅是一个哲学问题,还有实际优势:
- 您可以将任何归档器与任何压缩器一起使用。特别是,您可以选择另一个(例如更好的)压缩器,同时仍然使用您最熟悉的归档器(可能是 GNU
tar
)。同时工作的工具往往会为常见的归档任务发明自己的选项和规则。 - 如果文件系统引入了新功能,那么我们只需要升级我们的归档器。
- 如果你发明了一种新的压缩方法,那么你将能够开发一种新的压缩器,而不必关注如何遍历目录树、读取哪些元数据或哪个角色应该 单独的路径名组件。
pigz
是一个压缩器,似乎无意成为归档器。使用--zip
/-K
它使用.zip
格式与旨在用作压缩器和归档器的工具相关联。pigz
不必使用该格式的所有功能,尤其是存储多个文件的能力。它可以“改进”,但现在你知道我为什么认为这不是正确的事情。
仍在存档-和-压缩是一种非常常见的用例。一个好的归档器应该能够写入其标准输出。一个好的压缩器应该能够从其标准输入读取。然后您可以在管道中使用它们。这是一种通用方法。
具体来说,tar
您可以使用一个开关,使工具通过压缩器过滤(管道)存档:-z
for gzip
、--lzma
forlzma
等。通用开关是-I
,它允许您使用风俗压缩机。压缩机可以是pigz --zip
:
tar -cv -I 'pigz --zip' -f archive.tar.zip file1 file2 file3
可以使用相同的压缩器来解包,只要它支持-d
(pigz
即可):
tar -xv -I 'pigz --zip' -f archive.tar.zip
从技术上讲,这archive.tar.zip
是一个 zip 文件,里面有一个 tar 文件,因此它类似于“zip 内含 zip”。如果您执行unzip
此操作,那么您将获得一个名为 的 tar 存档-
。不过,上述tar
命令可以即时运行(不会创建中间文件)。
这就是在 Linux/Unix 中执行的操作。