# Ubuntu – How to rename/extract files with long names in zip archive

filenameunzipzip

I have a zip which contains files with very long names.

If I try to extract on the command line, I get the error "File name too long".
If I use the graphical archive manager it will not extract the files and it will not let me rename them. The same problem occurs if I mount the archive.

I can extract and rename files individually using:

unzip -p -c example.zip "long file name.ogg" > shortname.ogg


This is impractical with lots of files.

Is there a tool which will truncate filenames as they are extracted?

### To extract

We can use zipinfo as a part of this process, it's a program from zip package.

zipinfo -2 example.zip


will only shows the files names in example.zip, something look like:

file1-long-name-...-bla-bla.html
file2-long-name-...-bla-bla.html


so we can use this feature to extract all files:

zipinfo -2 example.zip | while read i;
do
long_fname=${i%.*} unzip -p -c example.zip "$i" > "${long_fname:0:250}.${i##*.}"
done;

• long_fname=${i%.*}: Removes extension from long file name, so in case of file name being less that of 256 character; We're not going to get a duplicate extension. • ${long_fname:0:250}.\${i##*.}: Creates a new file name with legitimate number of character also adds a . and file real extension.

Simply we are looping into files list and extract each of them with a new legitimate file name which is 256 character.

### To rename

You can use zipnote command, it's a part of zip package too.

Get a backup of your zip file first.

Run this command:

zipnote example.zip > names


Open names using an editor, it's look like this:

@ file name long in zip and a lot of other strings in the file name
@ (comment above this line)
@ (zip file comment below this line)


Add new file names like this:

@ file name long in zip and a lot of other strings in the file name
@=new short name for above file
@ (comment above this line)
@ (zip file comment below this line)


Then to rename files use:

zipnote -w example.zip < names


You renamed them all, you can also write a simple script which do this automatically for you.