Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
21
rated 0 times [  21] [ 0]  / answers: 1 / hits: 12634  / 2 Years ago, tue, may 10, 2022, 11:18:24

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?


More From » zip

 Answers
6

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.


[#11268] Thursday, May 12, 2022, 2 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
allowiel

Total Points: 189
Total Questions: 103
Total Answers: 105

Location: Slovenia
Member since Thu, Mar 18, 2021
3 Years ago
;