0

我需要解压缩与名称中特定关键字匹配的文件。一个典型的文件如下所示:

JGS-Memphis~PSU~FVT~00000~JGM96911~1~P~1100~EPS10R0-15~CL10D1120A3271~0121017~141645.XML

当我做

unzip -o SOMEFILE.zip '*~PSU~*' -d psutmp/

它可以SOMEFILE.zip毫无问题地解压缩上面的文件。但是当我这样做时

for i in `find . -name '*zip'`; do  unzip -o "$i" \'*PSU*\' -d psutmp/ ; done

它失败并出现filename not matched: '*PSU*'错误。我尝试删除 PSU 周围的刻度线。同样的问题。

我还尝试了-C不区分大小写地匹配文件名的选项

for i in `find . -name '*XML*zip'`; do  unzip -o "$i" -C *PSU* -d psutmp/ ; done

它失败了

error:  cannot create psutmp/JGS-Memphis~PSU~FVT~00000~JGM96911~1~P~1100~EPS10R0-15~CL10D1120A3271~0121017~141645.XML

这是铺位。我是具有 150GB 存储空间的开发机器的 root 用户。容量为 12%。我错过了什么?

4

1 回答 1

3

删除\'*P5U*\'. 您不需要转义单引号。

for i in `find . -name '*zip'`; do  unzip -o "$i" '*PSU*' -d psutmp/ ; done

在 for 循环中使用反引号有点代码味道。我会尝试其中一种:

# Unzip can interpret wildcards itself instead of the shell
# if you put them in quotes.
unzip -o '*.zip' '*PSU*' -d psutmp/

# If all of the zip files are in one directory, no need for find.
for i in *.zip; do unzip -o "$i" '*PSU*' -d psutmp/; done

# "find -exec" is a nice alternative to "for i in `find`".
find . -name '*.zip' -exec unzip -o {} '*PSU*' -d psutmp/ \;

就错误而言,确实psutmp/存在吗?是否设置了权限,以便您可以对其进行写入?

于 2012-10-17T23:46:44.883 回答