Linux单行find脚本如何实现未找到文件时返回非零退出码
单行Linux脚本实现SQL文件查找与缺失检查
完整单行脚本
expected_list=$(find DOC/ -name script.txt -exec cat {} \; | awk '/^[^-].*\.sql$/{print}'); expected_count=$(echo "$expected_list" | wc -l); found_count=$(echo "$expected_list" | xargs -I sql_file find . -name sql_file -type f | tee sql_scripts.txt | wc -l); [ "$found_count" -lt "$expected_count" ] && exit 1 || exit 0
脚本拆解说明
- 提取目标SQL文件名:
find DOC/ -name script.txt -exec cat {} \; | awk '/^[^-].*\.sql$/{print}'遍历DOC目录下所有script.txt,提取其中不以-开头且以.sql结尾的文件名,保存到expected_list变量中。 - 统计期望数量:
expected_count=$(echo "$expected_list" | wc -l)统计需要查找的SQL文件总数。 - 查找并记录结果:
echo "$expected_list" | xargs -I sql_file find . -name sql_file -type f | tee sql_scripts.txt递归查找当前目录及子目录中匹配的SQL文件,将路径写入sql_scripts.txt。 - 检查缺失并返回退出码:
[ "$found_count" -lt "$expected_count" ] && exit 1 || exit 0对比找到的文件数量与期望数量,若存在未找到的SQL文件,返回非零退出码(1),否则返回0。
补充说明
- 脚本通过变量缓存期望的文件列表,避免重复执行提取逻辑,提升效率;
tee命令同时实现结果写入文件和输出到管道,方便同步统计找到的文件数量;- 无论是否找到文件,
sql_scripts.txt都会被生成(无匹配时为空),同时脚本严格按需求返回对应退出码。
内容的提问来源于stack exchange,提问作者user22659171
相关产品推荐
相关产品推荐

