从zip文件中的文件名开头删除空格,而不解压缩zip文件

时间:2017-06-30 06:05:46

标签: shell zip

我在目录中有n个zip文件。在这些zip文件中,文件名的开头有空格。我只想在不解压缩zip文件的情况下删除此空间。

我尝试了一个shell脚本,如下所示。

#!/bin/sh
for zip in *.zip
do
    unzipped=unzip $zip
    trimmed=echo "${unzipped}" | sed -e 's/^[ \t]*//'
    #Want to zip the file here with the same name
done

在此脚本中需要帮助,或者欢迎使用任何简短方法。

1 个答案:

答案 0 :(得分:3)

您可以使用工具zipnote,它是Info-ZIP的zip包的一部分。根据上面的代码示例,最小的工作示例可能如下所示:

#!/bin/bash

for zip in *.zip
do
    ZIPNOTES=$(zipnote "$zip")
    TRIMMED=$(echo "$ZIPNOTES" | sed -e 's/^@[ \t]\{2,\}\(.*\)/&\n@=\1/')
    echo "$TRIMMED" | zipnote -w "$zip"
done

或作为一个班轮:

#!/bin/bash
for zip in *.zip; do zipnote "$zip" | sed -e 's/^@[ \t]\{2,\}\(.*\)/&\n@=\1/' | zipnote -w "$zip"; done


答案很长

假设您有一个包含文件archive.zip\ \ foo的zip存档bar,实用程序zipnote输出以下行:

$ zipnote archive.zip
@   foo
@ (comment above this line)
@ bar
@ (comment above this line)
@ (zip file comment below this line)

根据man zipnote

  

也可以通过这种方式更改zipfile中文件的名称。          这是通过以下几行来完成的               “@ 名称”          在创建的临时文件(此处称为foo.tmp)中使用               “@ = NEWNAME”          然后使用上面的-w选项。

因此,要重命名zip存档中的文件\ \ foo,您必须附加该行

@=foo

正好位于相应的行

之下
@   foo

并将其导入zipnote -w archive.zip。后者是通过略微修改sed命令来完成的,该命令匹配包含@符号后跟两个或更多空格的行,对行的其余部分进行分组并在下面附加修剪后的行。