![如何同时提取和删除 zip 存档的内容?](https://linux22.com/image/226435/%E5%A6%82%E4%BD%95%E5%90%8C%E6%97%B6%E6%8F%90%E5%8F%96%E5%92%8C%E5%88%A0%E9%99%A4%20zip%20%E5%AD%98%E6%A1%A3%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%9F.png)
我想将包含单一文件格式的多个小文件的大型 zip 存档(>180 GB)下载并解压到 SSD 上,但我没有足够的存储空间来容纳 zip 存档和提取的内容。我知道可以使用答案中提到的 zip 命令从存档中提取和删除单个文件这里和这里。我还可以使用命令获取存档中所有文件的名称unzip -l
,将结果存储在数组中,如上所述这里,使用给定的方法过滤掉不必要的值这里,并在 BASH 中迭代它们,如上所述这里。所以,最终的逻辑看起来像这样:
- 列出 zip 文件的内容并将
unzip -l
文件名存储在 bash 数组中,使用正则表达式来匹配存档中存在的单个文件扩展名。 - 迭代文件名数组并使用
unzip -j -d
和zip -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 -