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

Bash脚本检查文件存在功能失效问题求助

我来帮你拆解下问题,顺便给几个实用的解决方案~

首先先澄清你用到的几个判断参数的区别,搞懂它们才能选对合适的条件:

  • -e:检查任意类型的文件/目录/链接是否存在(只要路径能找到就返回真)
  • -f:严格检查是否是普通文件(排除目录、软链接等特殊类型)
  • -s:检查是否是存在且非空的普通文件(文件大小大于0)

先看你当前代码的语法问题

你把变量赋值和if写在了同一行却没加分隔符,这会导致bash解析错误!正确的写法应该是:

# 要么用分号分隔
FileName="$WORKDIR/.../name_of_the_file.tif"; if [ ! -e "${FileName}" ]; then ... fi

# 更推荐分开写,可读性更强
FileName="$WORKDIR/.../name_of_the_file.tif"
if [ ! -e "${FileName}" ]; then
    # 你的处理逻辑
fi

另外注意:变量赋值时=两边不能有空格,路径要用双引号括起来,避免文件名含空格或特殊字符时出错。

针对「只处理新TIFF文件」的解决方案

如果你的脚本是批量处理目录下的TIFF(而不是单个固定文件),那单靠判断单个文件存在性肯定不够,这里给三种常用思路:

方案1:用标记文件记录已处理文件

处理完一个TIFF后,生成一个同名的标记文件,下次运行时检查标记文件是否存在,存在就跳过:

# 遍历目标目录下所有TIFF文件
for tiff_file in "$WORKDIR"/.../*.tif; do
    # 生成对应标记文件的路径
    marker_file="${tiff_file}.processed"
    
    # 如果标记文件不存在,说明未处理过
    if [ ! -f "$marker_file" ]; then
        echo "正在处理:$tiff_file"
        # 这里写你的TIFF处理逻辑,比如转换、分析等
        
        # 处理完成后创建标记文件
        touch "$marker_file"
    else
        echo "跳过已处理文件:$tiff_file"
    fi
done

方案2:通过文件修改时间筛选新文件

记录上次脚本运行的时间,只处理比这个时间更新的文件,不需要额外标记:

# 存储上次运行时间戳的文件
timestamp_file="$WORKDIR/.last_process_time"
# 获取上次运行时间(文件不存在则用0)
last_run=$(cat "$timestamp_file" 2>/dev/null || echo 0)
# 获取当前时间戳
current_run=$(date +%s)

# 遍历TIFF文件
for tiff_file in "$WORKDIR"/.../*.tif; do
    # 获取文件的修改时间戳
    file_mtime=$(stat -c %Y "$tiff_file")
    
    # 如果文件修改时间晚于上次运行时间,就处理
    if [ "$file_mtime" -gt "$last_run" ]; then
        echo "处理新文件:$tiff_file"
        # 你的处理逻辑
    fi
done

# 更新时间戳文件,方便下次运行
echo "$current_run" > "$timestamp_file"

方案3:检查处理后的输出文件是否存在

如果你的处理逻辑会生成对应输出文件(比如把TIFF转成PNG),直接检查输出文件是否存在即可:

for tiff_file in "$WORKDIR"/.../*.tif; do
    # 假设处理后生成同名PNG文件
    output_file="${tiff_file%.tif}.png"
    
    if [ ! -f "$output_file" ]; then
        echo "处理$tiff_file -> $output_file"
        # 这里写转换逻辑,比如 convert "$tiff_file" "$output_file"
    fi
done

额外注意事项

  • 所有变量引用都用双引号括起来,避免文件名含空格、特殊字符时出错
  • 可以先用echo "$FileName"打印变量值,确认路径是否正确(很多时候问题出在路径拼接错误)
  • 如果是单个固定文件的场景,先检查变量赋值后的路径是否真的不存在,可能你判断的文件其实已经被生成了

内容的提问来源于stack exchange,提问作者Dr. E

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:09:12