摘要
我需要通过以下方式“修复”一批.zip文件,遍布整个文件系统:
坚持解压缩因为“$(dirname”$ 0“)/ $(basename”$ 0“)”会引发错误。
更长时间。
文件层次结构:
banners/
|
germany/
| |
| active/
| | |
| | 300x250/
| | | |
| | | file.jpg
| | | AC2 xx.zip
| | |
| | 600x228/
| | |
| | file.jpg
| | AC4 xx.zip
| nautics/
|
|
austria/
|
...
这就是我的尝试:
~/banners/> find . -name "*" -exec sh -c 'mv -- "$0" "$(0// /_)"' {} \;
在这里,我从banners/
向下删除了所有文件名/目录名中的所有空格。
AC2 xx.zip
现在看起来像AC2_xx.zip
我现在需要将这些.zip文件解压缩到一个新的子目录中,与.zip文件本身处于同一级别,命名与这些.zip文件相同。
以下是我尝试的命令:
find . -name "*.zip" -exec sh -c 'unzip "$0" "$(dirname "$0")/$(basename "$0")"' {} \;
这给了我一堆(全屏)错误,比如这个:
〜>存档:./ sun& amp / dugi_otok / 970x250 / SS4_970x250.zip
〜>警告:文件名不匹配:./ sun& amp / dugi_otok / 970x250 / SS4_970x250.zip
对于我的生活,我无法想象这一个。
重新删除空格
如果我让它工作并且文件被解压缩,那么计划是从顶级目录mv
重新运行banners/
命令,并再次用“_”替换空格。这会处理.zip文件的内容。
重新拉链
最后,我需要重新压缩这些新创建的子目录,命名为原始.zip文件并覆盖现有的.zip文件(最初是解压缩的)。
基本上重新拉链:
~> banners/germany/active/dugi_otok/300x250/AC2_xx/(newly unzipped contents)
成:
~> banners/germany/active/dugi_otok/300x250/AC2_xx.zip
我为这种混乱道歉,但我找不到更好的解释方法。
答案 0 :(得分:0)
basename
不会删除扩展程序,因此您的:
"$(dirname "$0")/$(basename "$0")"
只需重新创建$0
。替换为:
"$(dirname "$0")/$(basename -s ".zip" "$0")"
-s
的{{1}}选项会删除后缀
HTH
答案 1 :(得分:0)
我现在需要将这些.zip文件解压缩到一个新的子目录中 作为.zip文件本身的级别,命名与这些.zip相同 文件。
unzip
选项-d
适用于此:
find . -name "*.zip" -exec sh -c 'unzip "$0" -d "${0%.zip}"' {} \;
使用您尝试的命令,unzip
的第二个参数被视为要从zip文件中提取的文件的名称,当然在其中找不到。