因此问题如下: 我有一个文件夹,其中所有4个.zip和.md5都具有相同的基本文件名。
我有一个FOR循环:
for S in *.zip;
do
{
check_md5
}
done
check_md5 ()
{
if md5sum -c ${S:0:-4}.md5;
then
unzip_file
else
echo "MD5 failed"
fi
}
问题:第一个zip的脚本运行良好,但是当unzip_file进程结束时,它不会将S变量更新为下一个zip的文件名。
在unzip_file过程中,它将移出原始文件夹,并在末尾将当前的'S'.zip和.md5都移至存档文件夹。
该错误是否可能是由于unzip_file脚本移出了原始文件夹,或者是因为它在跳转到下一个周期之前将第一个.zip和.md5移出了原始文件夹?
还有其他想法吗?
谢谢。
答案 0 :(得分:0)
问题出在第一次迭代结束时,您最终位于另一个目录中。以下是一种可能的解决方法。
CWD="$PWD" # remember current working directory path
for S in *.zip; do
check_md5
cd "$CWD" # come back to the initial working directory at the end of each iteration
done
尽管与问题无关,但我更希望将文件名传递给函数,而不是访问其他位置的变量集。我发现很难进行故障排除,而且更容易出错。
unzip_file()
{
echo "unzipping $1"
# ...
}
check_md5()
{
if md5sum -c "${1:0:-4}.md5"; then
unzip_file "$1" # pass the argument forward
else
echo "MD5 failed"
fi
}
CWD="$PWD" # remember current working directory path
for S in *.zip; do
check_md5 "$S" # pass file name as an argument
cd "$CWD" # come back to the initial working directory
done
请注意,您的函数命名/模块化效果不佳。例如check_md5
的功能远不只是检查md5
的总和。