How to rename/extract files with long names in zip archive
Solution 1:
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.