如何同时提取和删除 zip 存档的内容?

如何同时提取和删除 zip 存档的内容?

我想将包含单一文件格式的多个小文件的大型 zip 存档(>180 GB)下载并解压到 SSD 上,但我没有足够的存储空间来容纳 zip 存档和提取的内容。我知道可以使用答案中提到的 zip 命令从存档中提取和删除单个文件这里这里。我还可以使用命令获取存档中所有文件的名称unzip -l,将结果存储在数组中,如上所述这里,使用给定的方法过滤掉不必要的值这里,并在 BASH 中迭代它们,如上所述这里。所以,最终的逻辑看起来像这样:

  1. 列出 zip 文件的内容并将unzip -l文件名存储在 bash 数组中,使用正则表达式来匹配存档中存在的单个文件扩展名。
  2. 迭代文件名数组并使用unzip -j -dzip -d命令连续提取和删除单个文件。

这种方法在所需时间、逻辑复杂度和计算资源方面的可行性如何?我担心删除和提取单个文件的效率,尤其是对于如此大的档案。如果您对这种方法有任何反馈或意见,我很乐意听到。预先感谢大家的帮助。

答案1

据我所知,从存档中删除文件zip可能需要两倍于存档的空间。所以最好是连接 USB 盘并在那里存储存档。然后将文件提取到 SSD 并删除存档(如果不需要)。

答案2

如果是 zip 文件:

  • 包含可信内容;和
  • 可通过 URL 获取
    • 在可靠的网络连接上

然后答案在这里可能有帮助。

简而言之,使用可以从流中解压缩的程序。

例如:

cd /place/to/store/data
curl https://www.example.org/input.zip | busybox unzip -
cd /place/to/store/data
curl https://www.example.org/input.zip | bsdtar xvf -

相关内容