如何在不使用tmp目录的情况下重新打包zip文件?

时间:2012-04-18 11:18:24

标签: linux bash

我有很多zip文件需要重新打包/重新压缩才能解决MediaWiki 0.1.18中的错误。

我可以用

做到
#!/bin/bash

for f in *zip; do
   cd tmp
   rm -rf *
   unzip ../"$f"
   zip -r ../"$f" *
   cd ..
done

但有没有办法做到这一点,例如有管道还是拉链选项?

4 个答案:

答案 0 :(得分:6)

gzip -d -c old.gz | gzip >new.gz

答案 1 :(得分:2)

你做不到。如果您将一些位发送到zip,则无法知道一个文件何时结束并且新文件何时开始。

实际上你可以编写自己的程序来完成这项工作但是根据你的描述,它似乎有点矫枉过正。此外,您不知道您正在修复哪些错误,因此无法建议其他解决方法。

答案 2 :(得分:2)

有一个名为AdvanceCOMP的实用程序可以完全满足您的需求。它会重新压缩ZIP和GZ文件(以及其他一些文件)而无需中间提取到磁盘。 (我确实认为使用的机制是解压缩数据并重新压缩它,但这不需要将文件写入磁盘或重新生成元数据。)

答案 3 :(得分:1)

有点晚了,但对于后来的人来说可能会有所帮助:

zipsplit -n 2147483648将重新打包至2GiB,无需提取。但由于此命令用于拆分zip文件,因此没有选项可以覆盖原始文件或指定输出文件,只能输出目录。