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

HP-UX下ksh环境统计1小时前文件数量的替代方案

解决HP-UX ksh下统计1小时前创建文件的问题

刚好碰到过HP-UX老版本find的这个坑!因为HP-UX自带的find是Berkeley风格的,不支持-mmin参数,而且-mtime只接受整数天数(不像GNU find支持小数),所以你之前的两个命令都报错了。给你几个靠谱的替代方案:

方案1:用Perl跨平台实现(最推荐)

Perl在几乎所有UNIX/Linux系统都预装,而且处理时间戳非常灵活,完全不依赖find的版本:

find . -type f -exec perl -e 'print((stat($ARGV[0]))[9] < time() - 3600 ? "1\n" : "")' {} \; | wc -l

原理说明:

  • stat($ARGV[0])获取文件的元数据,第9个元素是文件的修改时间戳(从epoch开始的秒数)
  • time() - 3600计算出1小时前的时间戳
  • 对比两者,如果文件修改时间早于1小时前,就输出一行"1",最后用wc -l统计行数,就是符合条件的文件数量

方案2:使用GNU Find(如果已安装)

很多HP-UX系统会安装GNU工具集(比如通过HP Software Assistant或者第三方源),GNU find支持-mmin参数,此时可以直接用:

gfind . -type f -mmin +60 | wc -l

注意:GNU find在HP-UX下通常叫gfind,而不是默认的find,如果找不到可以试试which gfind确认是否安装。

方案3:用ls+awk处理(依赖ls输出格式)

如果系统没有Perl和GNU find,也可以通过解析ls的时间输出来实现,但这个方法依赖HP-UX的ls格式,需要先确认你的ls -lT输出的时间格式(比如是否是MM/DD/YYYY HH:MM:SS):

ls -lT . | grep '^-' | awk '{
    split($7, date, "/");
    split($8, time, ":");
    file_time = mktime(date[3] " " date[1] " " date[2] " " time[1] " " time[2] " " time[3]);
    if (file_time < systime() - 3600) count++
} END {print count}'

注意:

  • ls -lT会显示完整的时间戳(包括时分秒)
  • grep '^-'过滤出普通文件(排除目录、链接等)
  • awk的mktime函数把字符串转换成时间戳,再和1小时前的时间对比统计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:58