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

如何归档特定文件夹中X小时前的日志文件?原脚本按小时处理失效

解决按小时归档日志的find脚本问题

嘿,我懂你遇到的麻烦了——原脚本里的-mtime +$hours是核心问题所在!因为find的-mtime参数单位是天,不是小时。比如你给hours传个2,-mtime +2会去找修改时间超过48小时的文件,完全不是你要的2小时前的目标文件。

给你两个实用的解决方案:

方法1:用-mmin转换为分钟计算

-mmin参数是按分钟判断文件修改时间的,我们只需要把小时数转换成分钟(小时×60)就行。修改后的脚本如下:

# 先确保目标归档目录存在,避免mv报错
mkdir -p "${DEST_DIRECTORY}/${TAR_DIR_NAME}"

# 查找X小时前的日志文件并移动
find "$DEST_DIRECTORY"/*.log -type f ! -name "*.tar.gz" -mmin +$((hours * 60)) -exec mv '{}' "${DEST_DIRECTORY}/${TAR_DIR_NAME}/" +

这里用+代替\;是让mv批量处理文件,比逐个处理效率更高;另外给所有变量加双引号,能防止路径里有空格或特殊字符导致命令出错。

方法2:用-newermt指定直观的时间点

如果你觉得计算分钟麻烦,可以用-newermt直接指定“X小时前”的时间点,这个参数更直观:

mkdir -p "${DEST_DIRECTORY}/${TAR_DIR_NAME}"

find "$DEST_DIRECTORY"/*.log -type f ! -name "*.tar.gz" ! -newermt "$hours hours ago" -exec mv '{}' "${DEST_DIRECTORY}/${TAR_DIR_NAME}/" +

! -newermt "$hours hours ago"表示找修改时间早于“X小时前”的文件,完全匹配你的需求。不过要注意,-newermt是GNU find的特性,大部分Linux发行版都支持,但如果是macOS这类BSD系统,得换成-newerct。

额外提醒

  • 一定要确认$hours变量是合法的数字,别传字符串或者负数,否则脚本会出问题。
  • 如果你的日志文件名带特殊字符(比如空格),双引号包裹变量的操作就特别重要,能避免很多意外bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:35:25