时不时地,我会收到一个 6 GB .zip 数据档案的下载链接,我想要:
下载
解压缩
使用 7z 重新压缩,并输入密码
我想避免在每个步骤中使用临时文件,因为它会在我的 SSD 上使用约 18 GB 的写入操作,而最后只需要 6 GB。
在 Linux 上,它可能wget ... | unzip ... | 7z ...
与管道有关。
如何在 Windows 上执行此操作?
注意:此问题链接到让 7-Zip 将档案直接解压到目录但不是重复的,因为链接的问题仅涵盖问题的“7z temp”部分,而我正在谈论下载+解压缩+7z 链。
此外,我正在寻找命令行解决方案而不是像让 7-Zip 将档案直接解压到目录。
答案1
以下命令行解决方案可避免使用临时文件进行解压缩/压缩,并且适用于 Windows。它使用-so
和-si
stdout/stdin 标志7z
。
7z e -so -r Takeout20201231_0941.zip *.mbox | 7z a -si -pSECRET -mhe=on -mx=2 Takeout20201231_0941.7z
请注意,我的原始档案中只有 1 个匹配*.mbox
,因此只有一个文件需要解压缩/压缩。
对于多个文件来说,情况会更加复杂,正如@DanielB 在其评论中所指出的那样:
此操作不适合管道或类似的东西。您实际上无法通过管道传输多个文件,因为它不仅仅是数据。它们还有名称。
最后,将原始 ZIP 的下载直接传输到7z e
不可能的,因为 ZIP 文件无法进行流解压缩:它们通常有一个索引在文件末尾,因此需要整个文件在开始减压之前,请先
为此,我们可以X:\
使用 OSFMount 快速创建 RAM 磁盘:
osfmount.com -a -t vm -m X: -s 8G -o format:ntfs