我需要解压缩与名称中特定关键字匹配的文件。典型文件如下所示:
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%。我错过了什么?
答案 0 :(得分: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/
是否存在?是否设置了权限以便您可以写入权限?