Ter*_*den 12 filename zip unzip
我有一个 zip,其中包含名称很长的文件。
如果我尝试在命令行上提取,则会收到错误“文件名太长”。
如果我使用图形存档管理器,它不会提取文件,也不会让我重命名它们。如果我挂载存档,也会出现同样的问题。
我可以使用以下方法单独提取和重命名文件:
unzip -p -c example.zip "long file name.ogg" > shortname.ogg
Run Code Online (Sandbox Code Playgroud)
这对于大量文件是不切实际的。
是否有工具可以在提取文件名时截断文件名?
Rav*_*ina 15
我们可以将其zipinfo用作此过程的一部分,它是来自zip包的程序。
zipinfo -2 example.zip
Run Code Online (Sandbox Code Playgroud)
只会显示 中的文件名example.zip,如下所示:
file1-long-name-...-bla-bla.html
file2-long-name-...-bla-bla.html
Run Code Online (Sandbox Code Playgroud)
所以我们可以使用这个特性来提取所有文件:
zipinfo -2 example.zip | while read i;
do
long_fname=${i%.*}
unzip -p -c example.zip "$i" > "${long_fname:0:250}.${i##*.}"
done;
Run Code Online (Sandbox Code Playgroud)
long_fname=${i%.*}: 去除长文件名的扩展名,以防文件名小于256个字符;我们不会得到重复的扩展名。${long_fname:0:250}.${i##*.}: 创建一个具有合法字符数的新文件名,并添加一个.文件真实扩展名。我们只是循环到文件列表中,并使用一个新的合法文件名(256 个字符)提取每个文件。
您可以使用zipnote命令,它也是zip包的一部分。
首先备份您的 zip 文件。
运行此命令:
zipnote example.zip > names
Run Code Online (Sandbox Code Playgroud)
使用编辑器打开名称,如下所示:
@ 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)
Run Code Online (Sandbox Code Playgroud)
添加新文件名,如下所示:
@ 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)
Run Code Online (Sandbox Code Playgroud)
然后重命名文件使用:
zipnote -w example.zip < names
Run Code Online (Sandbox Code Playgroud)
您将它们全部重命名,您也可以编写一个简单的脚本来自动为您执行此操作。