该unzip
命令没有递归解压缩存档的选项.
如果我有以下目录结构和存档:
/Mother/Loving.zip /Scurvy/Sea Dogs.zip /Scurvy/Cures/Limes.zip
我想将所有档案解压缩到与每个档案同名的目录中:
/Mother/Loving/1.txt /Mother/Loving.zip /Scurvy/Sea Dogs/2.txt /Scurvy/Sea Dogs.zip /Scurvy/Cures/Limes/3.txt /Scurvy/Cures/Limes.zip
我会发出什么命令或命令?
重要的是,这不会阻塞其中包含空格的文件名.
如果要将文件解压缩到相应的文件夹,可以尝试这样做
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
适用于可处理高I/O的系统的多处理版本:
find . -name "*.zip" | xargs -P 5 -I fileName sh -c 'unzip -o -d "$(dirname "fileName")/$(basename -s .zip "fileName")" "fileName"'
这是一个涉及find命令和while循环的解决方案:
find . -name "*.zip" | while read filename; do unzip -o -d "`basename -s .zip "$filename"`" "$filename"; done;
一个正确处理所有文件名(包括换行符)并提取到与文件位于同一位置的目录的解决方案,只需删除扩展名:
find . -name '*.zip' -exec sh -c 'unzip -o -d "${0%.*}" "$0"' '{}' ';'
请注意,您可以.jar
通过添加它们来轻松地使其处理更多文件类型(例如)-o
,例如:
find . '(' -name '*.zip' -o -name '*.jar' ')' -exec ...
您可以在一个命令行中使用find和-exec标志来完成这项工作
find . -name "*.zip" -exec unzip {} \;