Bash脚本遍历一级子目录下文本文件失败原因排查
问题原因及解决方法
你的脚本无法工作的核心问题是路径错误:
你写的/{2020..2022}/*.txt是绝对路径,Bash会去系统根目录(/)下查找2020、2021、2022文件夹,但你的目标文件夹是在脚本运行的当前目录下,不是根目录,所以根本匹配不到任何文件。
修正后的脚本(含逐行解析逻辑)
for file in {2020..2022}/*.txt; do # 跳过不存在的文件(避免空匹配时输出模式字符串) [ -f "$file" ] || continue echo "正在处理文件: $file" # 逐行读取并解析文件内容,这是Bash处理文本的标准写法 while IFS= read -r line; do # 这里替换成你的解析逻辑,比如打印行内容 echo " 读取到行: $line" done < "$file" done
关键说明
- 去掉路径开头的斜杠,使用相对路径
{2020..2022}/*.txt,Bash会自动在当前目录下的对应年份文件夹中匹配所有.txt文件。 - 添加
[ -f "$file" ] || continue的作用是:如果某个年份目录下没有.txt文件,大括号展开后的匹配模式会直接作为字符串保留,这个判断可以跳过这些无效的“假文件”,避免后续报错。 - 用
while IFS= read -r line逐行读取是最可靠的方式:IFS=能保留行首/行尾的空格,-r会禁止反斜杠的转义功能,处理包含特殊字符的文本行不会出问题。
内容的提问来源于stack exchange,提问作者JFerro
相关产品推荐
相关产品推荐

