Answers:
我们可以将其zipinfo
用作程序的一部分,它是程序zip
包中的程序。
zipinfo -2 example.zip
只会显示中的文件名example.zip
,如下所示:
file1-long-name-...-bla-bla.html
file2-long-name-...-bla-bla.html
因此我们可以使用此功能提取所有文件:
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%.*}
:从长文件名中删除扩展名,因此如果文件名少于256个字符;我们不会得到重复的扩展名。${long_fname:0:250}.${i##*.}
:使用合法的字符数创建新的文件名,并添加.
和文件的真实扩展名。简而言之,我们进入文件列表并使用新的合法文件名256个字符提取每个文件。
您可以使用zipnote
命令,它也是zip
包的一部分。
首先获取您的zip文件的备份。
运行以下命令:
zipnote example.zip > names
使用编辑器打开名称,如下所示:
@ 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)
像这样添加新的文件名:
@ 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)
然后使用以下命令重命名文件:
zipnote -w example.zip < names
您将它们全部重命名,还可以编写一个简单的脚本来自动为您执行此操作。
IFS= read -r i
文件名以空格开头或包含外壳程序可能会解释为转义序列的内容,则应使用。
unzip -l <ARCHIVE>
什么?您想如何将名称截断?您是否要在提取过程中将目录结构保留在存档中?