如何在Linux上解压缩多部分(跨区)ZIP?


73

我需要将400mb的文件上传到我的Web服务器,但是我只能上传200mb的文件。我的房东建议我使用跨区存档,这在Linux上从未做到过。

我在自己的文件夹中创建了一个测试,拉上了一个PDF到test.zip.001.002.003。如何解压缩?我需要先加入他们吗?

请注意,使用7z和使用ZIP格式一样让我感到高兴。如果这对结果有任何影响。


这在安装了有限软件的Web服务器上可能无济于事,但我在其他任何地方都没有看到此解决方案,而是我使用的解决方案:java.util.zip API已处理了我扔给它的所有ZIP部分。 ,甚至在更普遍的情况下也没有结尾部分或最后一部分不完整。我从Jython调用它,所以它是脚本形式,这里是代码:github.com/combatopera/unzipparts
Andrzej Cichocki 2013年

Answers:


74

您需要先加入他们。您可以使用常见的linux应用程序,cat如以下示例所示:

cat test.zip* > ~/test.zip

这将串连所有的test.zip.001test.zip.002等文件合并成一个更大的,test.zip文件。拥有单个文件后,即可运行unzip test.zip

“如何在Linux中创建,拆分,连接和提取zip归档文件”可能会有所帮助。


1
好的,我喜欢那...进度...但是我这里确实是Linux n00b。我认为x*是文件名吗?并且~/hugefile是目录吗?代字号的目的是什么?很抱歉问我怀疑是非常基本的问题。
蒂姆(Tim)

分割文件时,应使用x_之类的前缀(例如x_split1,x_split2 ... ...,例如Windows后缀file.001,file.002 ...等),代字号代表您的主目录。〜/ hugefile与/ home / tim / hugefile相同。您是否分割了文件?拆分文件的名称是什么?
fromnaboo 2012年

1
我想我看到那里的问题就会进来,跨区档案是在窗口创建,使用7zip的有ZIP扩展,因此它自动创建的TEST.zip.001TEST.zip.002并且TEST.zip.003这意味着分割是完全不同的。开始看起来像将Linux扔到VMWare上并在此处创建文件可能更容易,然后至少我只处理1个OS。可以对任何文件类型使用SPLIT命令吗?即图像,音频电影等?
2012年

是的,split命令适用于任何文件。使用apt-get安装p7zip,在Debian或yum上安装p7zip,在fedora上安装p7zip,使用以下文件加入文件:cat TEST.zip。*>存档并提取。
fromnaboo 2012年

1
7za x archive如果归档文件包含目录结构,则可能会更好。
slm

38

Linux unzip实用程序实际上并不支持多部分zip。从手册

除与zip结合使用外,尚不支持多部分归档。(必须按顺序将所有部分串联在一起,然后必须在串联的归档文件上执行zip -F (对于zip 2.x)或zip -FF(对于zip 3.x)才能“修复”它。而且,zip 3.0和更高版本可以合并使用将多部分(拆分)归档文件合并为单个文件归档文件zip -s- inarchive -O outarchive。有关更多信息,请参见zip 3手册页。)

因此,您需要首先连接片段,然后修复结果。cat test.zip.*连接所有被称为test.zip.*通配符*的任意字符序列的文件;文件以字典顺序进行枚举,由于前导零,因此与数字顺序相同。>test.zip将输出定向到文件中test.zip

cat test.zip.* >test.zip
zip -FF test.zip --out test-full.zip
unzip test-full.zip

如果您是通过直接分割zip文件而不是使用官方Pkzip实用程序创建多部分zip来创建作品的,那么您要做的就是将各个部分结合在一起。

cat test.zip.* >test.zip
unzip test.zip

1
第二个命令应该是zip -FF test.zip --out test-full.zip-如果没有--out命令,则会给您一个错误
Alvin

3
对我来说,FF如果我指向zip第一个多部分文件,则cat不需要这种方法。
贾尼斯·埃默里斯(JānisElmeris)2014年

1
如@JānisElmeris所述,在使用存档之前,无需将其连接zip -FF起来。
勒内·

24
7z x archive.zip.001

它将自动找到其余的


1
太奇怪了...要使此工作正常,首先需要将所有ZIP文件(.zXX和.zip)重命名为.zip.xxx(.zip是最后一部分),然后可以在第一个文件上使用7z x ,可以“解压缩”为级联的zip,然后可以使用unzip而不是7z再次将其解压缩...我不确定文件是否已正确解压缩,但至少这次不知道CRC错误。 。ZIP在Linux上是如此难以置信的-如果可以的话,请避免。:(
精力充沛的2016年

至少对于centos,我们还需要有关如何安装7z的说明
stiv

20

我在这里找到了答案:https : //superuser.com/a/517758/10264

这个答案在概念上与Gilles相似,即首先将split存档使用split组合为普通存档,然后使用unzip解压缩。

不同之处在于-FF,您只是告诉zip重新打包拆分文件而不拆分,而不是使用对我不起作用的标志。这就是-s 0标志的含义。

因此,首先,将拆分的存档合并到一个存档中:

zip -s 0 split-foo.zip --out unsplit-foo.zip

然后,使用解压缩提取单个存档:

unzip unsplit-foo.zip

2
这是zip 3.x的正确答案
texasbruce

0

只是另一个例子。这在bash中为我工作以拆分3GB oracle安装程序:

echo "<installOracleDB.sh>: Splitting OracleDB installer"
zip /tmp/linuxx64_12201_database.zip --out /tmp/linuxx64_12201_oradb.zip -s 1000m
echo "<installOracleDB.sh>: Merging OracleDB installer"
zip -FF /tmp/linuxx64_12201_oradb.zip --out /tmp/linuxx64_12201_database.zip
echo "<installOracleDB.sh>: Removing temporary files OracleDB installer"
find /tmp -type f -name 'linuxx64_12201_oradb*' -exec rm {} +
echo "<installOracleDB.sh>: Unizipping OracleDB installer"
unzip /tmp/linuxx64_12201_database.zip

这看起来与以前的答案非常相似。您能解释一下它在做什么以及它与已经发布的内容有何不同吗?请不要在评论中回复;编辑您的答案,使其更清晰,更完整。
斯科特,

嗨,苏格兰人,我希望我可以在评论中回答,但我现在一点也没做。这个答案给出了完整的命令列表,用于在UNIX上拆分,合并和解压缩大文件。我将提供更多解释性文字来阐明我的答案。谢谢您的回复。
TheHagueCoder

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.