BASH - 在 for 循环问题中查找文件

BASH - look for file in for loop issue

所以问题如下: 我有一个包含 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移出了原来的文件夹?

还有其他想法吗?

提前致谢。

问题是在第一次迭代结束时您最终进入了不同的目录。以下是一种可能的修复方法。

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 "
    # ...
}

check_md5()
{
    if md5sum -c "${1:0:-4}.md5"; then
        unzip_file ""  # 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

另外请注意,您的函数 naming/modularization 看起来不太好。例如check_md5 不仅仅是检查 md5 总和。