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
总和。
所以问题如下: 我有一个包含 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
总和。