使用管道提取大型 7z 嵌套档案

问题描述 投票:0回答:1

我有一个大型受密码保护的 7z 存档,其中包含另一个受密码保护的 7z 存档,结构如下:

OuterArchive.7z (200GB)
    └── InnerArchive.7z (200GB)
        ├── SomeFile.ext (1GB)
        └── ...

存档的大小非常大(超过 200GB),我没有足够的可用空间来将整个存档提取为文件。因此,我尝试使用标准 I/O 管道通过以下命令仅提取请求的文件:

7z x OuterArchive.7z -so InnerArchive.7z -ppass1 | 7z x -si -so -ppass2 SomeFile.ext

这个命令是否正确(因为它不起作用),并且由于文件大小超过了设备的 RAM(16GB),是否有可能执行这样的事情?


更新: 这是命令的结果:

ERROR: 
Can not open the file as archive

E_NOTIMPL

您可以看到命令的第一部分正在运行:

┌──(user㉿dhcppc4)-[~/Desktop/x]
└─$ 7z x OuterArchive.7z -so InnerArchive.7z -ppass1 | head -n 1 | hexdump -C
00000000  37 7a bc af 27 1c 00 04  5f 0f 51 b0 a3 61 2f 29  |7z..'..._.Q..a/)|
00000010  1d 00 00 00 27 00 00 00  00 00 00 00 6f a6 f5 15  |....'.......o...|
00000020  a3 8c 32 aa 06 f8 aa c7  92 b0 42 a1 01 0c 66 a3  |..2.......B...f.|
00000030  77 09 6c c3 f9 da 72 28  20 d0 b6 ac 0b b8 ed fc  |w.l...r( .......|
...

所以这部分肯定有问题:

7z x -si -so -ppass2 SomeFile.ext

linux shell pipe 7zip stdio
1个回答
0
投票

你可以尝试这个方法。

  • 创建一个虚拟文件。

    fallocate -l 1G 内部BigFile1

  • 使用 7z 压缩

    7z 一个innerBigFile1.7z innerBigFile1

  • 将someText.txt添加到innerBigFile1.7z

    7z 一个innerBigFile1.7z someText.txt

  • 将innerBigFile1.7z添加到outerBigFile.7z

    7z 外部BigFile.7z 内部BigFile1.7z

  • 查看 7z 存档内部

    7z l 外部BigFile.7z

  • 由于空间限制,从 outrBigFile.7z 中提取 someText.txt,无需创建临时文件

    7z x -so 外层大文件.7z 内层大文件1.7z | 7z x -si -so -y -ttar someText.txt > someTextNew.txt

  • x:从存档中提取

  • -so :提取到标准输出

  • si :从标准输入输入(第一个命令的输出)

  • -y:说是!

  • -ttar : 强制输出到 TAR

© www.soinside.com 2019 - 2024. All rights reserved.