You download a zip file only to find that it barfs when you try to un-archive it:
$ unzip -t test.zip Archive: test.zip End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive. In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.
What a nightmare.
Now you’re left with the prospect of attempting to download again, or see if you can salvage what you have. Bandwidth is cheap, but the machine at the other end is no longer responding. Great… time to learn how to extract a partially downloaded / corrupt zip file!
It’s actually a lot easier than you might think… which makes me wonder why i’ve never learnt it before. First try a little force:
$ zip -F test.zip --out partial.zip Fix archive (-F) - assume mostly intact archive zip warning: bad archive - missing end signature zip warning: (If downloaded, was binary mode used? If not, the zip warning: archive may be scrambled and not recoverable) zip warning: Can't use -F to fix (try -FF) zip error: Zip file structure invalid (test.zip)
Nope. Now a little more force:
$ zip -FF test.zip --out partial.zip Fix archive (-FF) - salvage what can zip warning: Missing end (EOCDR) signature - either this archive is not readable or the end is damaged Is this a single-disk archive? (y/n): y Assuming single-disk archive Scanning for entries... copying: selected exported/3 monkeys.jpg (2629234 bytes) ... copying: selected exported/worried and walking.jpg (21563355 bytes) Central Directory found... zip warning: reading central directory: Undefined error: 0 zip warning: bad archive - error reading central directory zip warning: skipping this entry...
Good to go?
$ unzip -qt partial.zip No errors detected in compressed data of partial.zip.
Good to go!