bash - BASH - 在 for 循环问题中查找文件
问题描述
所以问题如下:我有一个包含 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 $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
另请注意,您的函数命名/模块化看起来并不好。egcheck_md5
做的不仅仅是检查md5
总和。
推荐阅读
- java - 通过 groovy 脚本运行测试步骤时如何解决错误“意外元素:CDATA”?
- javascript - 如何在 cy.visit() 中向 URL 插入动态值?
- reactjs - Gatsby Webhooks 以及如何从 Strapi 触发构建
- html - Firefox 和 MS Edge 在隐藏元素中下载内容(但不应该)
- sql-server - VB/SQL - 如何从具有多个匹配项的联接表中过滤 DataGridView
- python-3.x - 使用 BS4 在抓取 Trustpilot 审核日期时遇到问题
- java - 我如何解决 MariaDB 服务器中的错误
- google-apps-script - 将报告文件保存到 G Drive
- java - Android插件不能与类未找到异常统一工作?
- java - 使用 KSP/CNG 登录 java