You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:36:06