我在目录中有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
在此脚本中需要帮助,或者欢迎使用任何简短方法。
答案 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
命令来完成的,该命令匹配包含@
符号后跟两个或更多空格的行,对行的其余部分进行分组并在下面附加修剪后的行。