我有这个 bash 脚本来解压缩具有不同密码的文件。但它会无限期地解压并损坏解压后的文件
PASS="passfoo passbar passfoobar"
LIST=$(ls -1 *.{zip,7z,7z.001,rar})
for password in $PASS; do
OIFS="$IFS"
IFS=$'\n'
for i in $LIST
do
echo "$password"
7z x -y -p"$password" "$i" -aoa
if [ $? -eq 0 ]; then
continue
fi
done
IFS="$OIFS"
done
为了临时修复它,我不得不为每个密码创建一个循环。
我想要的是,当脚本匹配密码时,脚本不会测试其他脚本,并且如果与尝试正常解压缩它的任何密码不匹配(如果它没有密码)或显示错误(如果文件有密码但它不在变量中)而不停止解压缩其他文件。思
PD:请记住,要解压缩的文件有时会带有带有空格和其他非 ASCII 字符的名称,或者是按部分压缩的文件
不确定这是否
continue
是内部循环内的正确操作,但我已将您的代码调整为此。启用默认情况下
shopt -s
未启用的 shell 选项shopt -u
以禁用这些选项。extglob
一项功能,让您*.@(zip|7z|rar)
可以匹配不同的文件扩展名。它扩展到*.zip
*.7z
并*.rar
扩展到目录中以该特定扩展名(如果有文件)结尾的所有文件,但不确定顺序。nullglob
如果没有以模式结尾的文件,则*.@(zip|7z|rar)
不会评估任何内容,因此它将为空,如果未启用,则 glob 将扩展为文字*.rar
或*.7z
或*.zip
将导致脚本错误。编辑:根据 OP 的 @ajcg ,我已更改 continue 中断,因此它按预期工作。