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

如何编写Bash脚本判断文件创建时间是否在1小时以内

Bash实现:判断指定文件创建时间距当前是否不足1小时

首先提前说个容易踩的坑:并非所有文件系统都存储文件的真实创建(出生)时间,ext4、XFS、Btrfs这类现代主流文件系统支持该属性,ext3等老旧文件系统无相关记录,实现时建议加回退逻辑避免报错。

可直接用的实现脚本

这个脚本适配绝大多数使用GNU工具链的Linux发行版(Debian、Ubuntu、RHEL、CentOS等):

#!/bin/bash

# 入参校验
if [ $# -ne 1 ]; then
    echo "调用方式: $0 <待检测文件路径>"
    exit 2
fi

TARGET_FILE="$1"
if [ ! -f "$TARGET_FILE" ]; then
    echo "错误:路径 $TARGET_FILE 不存在或不是常规文件"
    exit 2
fi

# 取时间戳计算差值
CURRENT_TS=$(date +%s)
# GNU stat 用%W取文件创建时间的Unix时间戳,不支持时返回0
FILE_CREATE_TS=$(stat -c "%W" "$TARGET_FILE")

# 不支持创建时间读取时,回退用最后修改时间判断
if [ "$FILE_CREATE_TS" -eq 0 ]; then
    echo "提示:当前文件系统不支持读取文件创建时间,将使用最后修改时间做判断"
    FILE_CREATE_TS=$(stat -c "%Y" "$TARGET_FILE")
fi

DIFF_SECONDS=$((CURRENT_TS - FILE_CREATE_TS))

# 1小时对应3600秒,小于该值即符合判断
if [ $DIFF_SECONDS -lt 3600 ]; then
    echo "检测通过:文件 $TARGET_FILE 生成时间距当前不足1小时,已存在 $((DIFF_SECONDS/60)) 分钟"
    exit 0
else
    echo "检测不通过:文件 $TARGET_FILE 生成时间距当前已超过1小时,已存在 $((DIFF_SECONDS/3600)) 小时"
    exit 1
fi

实现注意事项

  • 别搞混文件的三类时间属性:
    • 创建时间(Birth time):文件首次写入磁盘的时间,是本需求的目标字段,GNU stat用%W读取
    • 修改时间(mtime):文件内容最后一次被修改的时间,是最稳妥的回退判断字段,用stat -c "%Y"读取
    • 状态变更时间(ctime):文件权限、属主等元数据最后变更的时间,和创建时间无关,不要用这个字段判断
  • 如果是macOS/BSD系统,stat的参数和GNU版本不一样,读取创建时间要替换为stat -f "%B" "$TARGET_FILE",其余计算逻辑完全一致
  • 不要用解析ls命令输出的方式提取时间,ls的输出格式受locale、时区、alias配置影响,兼容性极差,很容易出bug
  • 脚本退出码做了区分:0代表文件生成时间不足1小时,1代表超过1小时,2代表入参错误/文件不存在,可以直接在cron任务、CI流程、其他shell逻辑里调用判断

调用示例:
先给脚本加执行权限:chmod +x check_file_age.sh
单独执行检测:./check_file_age.sh /path/to/your/file
嵌入其他逻辑使用:

if ./check_file_age.sh /tmp/runtime_cache.lock; then
  echo "缓存文件仍在1小时有效期内,跳过重新生成步骤"
fi

内容的提问来源于stack exchange,提问作者airdata

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:18:11