Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I pulled a zip file from the web which was packed on a system where filenames were encoded in a format my unzip program fails to read. Perhaps the file-system does not support those weird characters, or the shell. I'm not entirely sure.

Since I don't really care about the filename an acceptable solution would be to rename the file, or write the contents to a file named something else than the name specified in the archive. Is that possible with a common command line zip utility? If so, how. Other suggestions on what may be wrong (perhaps it's not the zip utility) are also welcome.

The symptoms are as follows:


$ unzip -l 3688232.zip ; unzip 3688232.zip 
Archive:  3688232.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
   107937  10-24-2012 01:00   [-?M+?V+?e-?] Le Gout Des autres - Agn+?s Jaoui - 2000 (sep subs).srt
     6354  10-24-2012 01:00   le.gout.des.autres.(3688232).nfo
---------                     -------
   114291                     2 files
Archive:  3688232.zip
error:  cannot create [-?M+?V+?e-?] Le Gout Des autres - Agn+?s Jaoui - 2000 (sep subs).srt
        Invalid or incomplete multibyte or wide character

$ unzip --help 
UnZip 6.00 of 20 April 2009, by Info-ZIP.  Maintained by C. Spieler.  Send
bug reports using http://www.info-zip.org/zip-bug.html; see README for details.

Note:
I am not particularly interested in suggestions involving graphical archivers, because I have already successfully extracted the file using `wine WinRAR.exe'.

share|improve this question
    
You can't, with normal tools, rename a file while it's in the ZIP archive. Best you can do is to rename files as you extract them. –  Daniel R Hicks Dec 11 '13 at 23:28
    
Though you could, with a slightly abnormal tool (a hex editor) go into the file and "zap" the "odd" characters (replace with "x", eg). It would take some slight knowledge of the ZIP format, but the names are in clear text, so it's not that difficult. You do need to zap them in two places, though, in the general case. –  Daniel R Hicks Dec 12 '13 at 12:00

2 Answers 2

up vote 0 down vote accepted

Can you try unzip -p file.zip archivedfilename.ext > newfilename.ext?

share|improve this answer
    
That concatenates all the files into one. funzip is better for that purpose because you get only the first file on stdout, but you'll run into trouble if the desired file is not "first in the archive". –  Ярослав Рахматуллин Oct 23 '12 at 23:55
    
So even if you specify the name of the archived file (with wildcards to deal with the issue of invalid characters), unzip still extracts all the files? –  Karan Oct 23 '12 at 23:59
    
I misread your answer tbh. This works: unzip -p 3688232.zip *srt > moo.srt –  Ярослав Рахматуллин Oct 24 '12 at 0:03

I managed to get all the files with Python:

import zipfile
z = zipfile.ZipFile('file.zip')
for i, f in enumerate(z.filelist):
    f.filename = 'file_{0:03}'.format(i)
    z.extract(f)

You will also get some empty files corresponding to the directory entries.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.