Bash遍历文件从第二个开始获取前后连续文件日期的实现方法
实现方案
核心逻辑说明
- 先将目录下符合命名规则的tif文件按自然顺序存入数组,保证文件顺序符合预期
- 校验文件数量:至少有2个文件才执行后续逻辑
- 初始化前一个文件
file1为数组第一个元素 - 从数组第二个元素开始遍历作为当前文件
file2,每次执行完逻辑后将file2赋值给file1,供下一轮循环使用
修正后完整代码
#!/bin/bash output_path="./output" # 替换为你实际的输出目录,提前创建好避免报错 # 先创建输出目录(可选,防止目录不存在报错) mkdir -p "$output_path" # 读取当前目录下所有tif文件到数组,按自然名称排序,保证顺序正确 file_list=(*.tif) # 判断文件数量是否满足至少2个 if [ ${#file_list[@]} -lt 2 ]; then echo "文件数量不足2个,无法执行处理逻辑" exit 1 fi # 初始化前一个文件为数组第一个元素 file1="${file_list[0]}" # 从数组第二个元素(下标1)开始遍历 for ((i=1; i<${#file_list[@]}; i++)); do file2="${file_list[$i]}" # 提取日期,注意要echo文件名传给awk,否则会把文件名当命令执行 f1=$(echo "$file1" | awk -F'[_.]' '{print $5}') f2=$(echo "$file2" | awk -F'[_.]' '{print $5}') # 拼接输出文件名,不要用+,直接拼接变量即可,可按需修改命名规则 outfile="${output_path}/${f1}_${f2}.tif" # 调用Python函数,参数加引号避免日期/路径含空格时报错 function_python -"$f1" -"$f2" -"$outfile" # 更新file1为当前file2,供下一轮循环使用 file1="$file2" done
原有代码问题修正说明
- 修复了无
file1初始值的问题,第一轮循环就可以拿到正确的前一个文件 - 修复了提取日期的语法错误:原写法
"$file1" | awk会尝试执行文件名作为命令,增加echo传输文件名给awk - 修正了输出路径拼接规则:Bash中变量拼接不需要用
+,直接拼接即可,增加路径分隔符/避免输出路径错误 - 增加了文件数量校验逻辑,避免文件不足时执行报错
- 仅读取
.tif后缀的目标文件,避免目录下其他无关文件干扰逻辑
内容的提问来源于stack exchange,提问作者Nihilum
相关产品推荐
相关产品推荐

