Ubuntu下7z批量解压时跳过错误密码的实现方法咨询
解决7zip密码错误时生成空文件/文件夹并跳过错误密码的问题
你的脚本存在语法错误和逻辑问题,导致密码错误时会生成空文件/文件夹,且错误退出内层循环。以下是修正后的方案:
核心修改思路
- 先验证密码正确性再解压:用7zip的
t命令测试密码,该命令仅验证密码和压缩包完整性,不会生成任何文件 - 修正数组遍历语法,避免文件名含空格时出错
- 新增空文件/文件夹清理逻辑,确保目录干净
- 调整循环逻辑:密码正确则解压并跳至下一个压缩包,错误则继续尝试下一个密码
修正后的脚本
FILES=./IN/* PASS=('1' '2' '3') # 清理空文件和空文件夹的函数 clean_empty() { # 删除OUT目录下的空文件 find ./OUT -type f -empty -delete # 从内到外删除空文件夹 find ./OUT -type d -empty -delete } for f in $FILES do # 处理当前压缩包前先清理残留的空文件 clean_empty for psd in "${PASS[@]}" do # 静默测试密码是否正确 if 7z t -p"$psd" "$f" > /dev/null 2>&1; then # 密码正确,执行解压 7z x -y -p"$psd" -o./OUT "$f" # 解压完成,跳出密码循环,处理下一个压缩包 break else # 密码错误,清理可能生成的临时空文件,继续尝试下一个密码 clean_empty continue fi done done
关键细节说明
7z t -p"$psd" "$f" > /dev/null 2>&1:静默执行密码验证,成功返回0,失败返回非0,避免输出干扰"${PASS[@]}":正确遍历数组,双引号处理含空格的密码(如果有)- 清理函数:即使解压过程中意外生成空文件/文件夹,也能自动清除,保证OUT目录整洁
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

