如何通过终端命令匹配任意子文件夹路径批量解压zip文件
批量解压任意子目录下zip文件的实现方法
你不需要单独写占位符匹配路径中的文件夹名,find 命令原生支持递归遍历指定目录下的所有子内容,完全可以满足需求。
先纠正你原有命令的问题:你之前写的 find ./ * / -name \*.zip -exec unzip {} \; 存在路径参数错误,多余的 * 和 / 会让find把当前目录下所有文件、系统根目录都纳入搜索范围,很容易误解压其他位置的zip包。
推荐使用的稳妥命令
直接指定Exercises为搜索根目录即可,命令会自动遍历下面所有层级的子文件夹(无论文件夹是什么名称),定位所有zip文件,并且把压缩包内容解压到对应zip所在的原目录,不会把所有解压后的文件都堆到你执行命令的当前路径:
find ~/Desktop/Exercises -type f -name "*.zip" -execdir unzip {} \;
各参数作用:
~/Desktop/Exercises:find开始搜索的起始路径,按你自己的实际存储位置调整即可-type f:限定只匹配普通文件,过滤掉名字带.zip后缀的文件夹,避免unzip执行时报错-execdir unzip {} \;:先切换到每个zip文件所在的目录再执行解压操作,保证解压出的文件和原zip在同一文件夹下
匹配单层任意子文件夹的写法
如果你确认所有zip都只存放在Exercises下的一级子文件夹(也就是你给出的示例结构,没有更深的目录嵌套),可以直接用shell通配符*代替你写的**HERE**占位符,写法如下:
find ~/Desktop/Exercises/*/ -name "*.zip" -execdir unzip {} \;
这个写法里的*会自动匹配Exercises下所有一级子目录,和你预期的占位符效果完全一致。但它不会搜索更深层级的子文件夹,如果后续子目录里还有嵌套文件夹存zip就无法识别,更推荐使用前面的递归搜索写法。
内容的提问来源于stack exchange,提问作者user14826807
相关产品推荐
相关产品推荐

