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

Redhat Shell脚本:统计近5天修改文件数量(偏好ls命令)

用ls命令统计近5天更新的文件数量

首先得明确:ls本身没有像find那样的-mtime/ctime这类直接按时间范围过滤的参数,你之前用-mtime是找错了工具——这个参数是find的,不是ls的。不过可以通过ls结合文本处理工具来实现需求,下面是几种可行的方法:

方法1:ls + awk + 日期计算

利用ls的长格式输出提取修改时间,再用awk对比日期:

# 先算出5天前的日期,格式和ls输出一致(比如"Oct 10")
five_days_ago=$(date -d "-5 days" +"%b %d")
# 输出文件列表,过滤出近5天修改的文件(排除目录),统计数量
ls -l --time-style="+%b %d" | awk -v target="$five_days_ago" '$6" "$7 >= target && $1 !~ /^d/' | wc -l
  • --time-style="+%b %d":强制ls输出“月份缩写 日期”的时间格式,避免格式不一致导致匹配失败
  • $6" "$7 >= target:对比文件修改日期是否在5天前之后
  • $1 !~ /^d/:排除目录(如果要统计目录就删掉这部分)

方法2:ls + grep(仅适合当月内统计)

如果当前统计的时间范围在同一个月里,可以用grep匹配日期范围:

# 生成5天内的日期区间
start_day=$(date -d "-5 days" +"%d")
end_day=$(date +"%d")
current_month=$(date +"%b")
# 筛选对应月份、日期在区间内的文件,统计数量
ls -l | grep -E "^-.*$current_month ($start_day|$(seq $((start_day+1)) $end_day))" | wc -l

注意:跨月份时(比如从10月30日到11月4日)这个方法会失效,因为月份缩写变了。

题外话:更可靠的方案还是用find

ls的核心功能是列文件,不是过滤文件,它的时间输出格式会随系统设置、文件新旧(比如超过半年的文件会显示年份而非日期)变化,很容易出现匹配错误。如果能接受用find,这命令靠谱得多:

# 统计当前目录下近5天修改的文件(不递归子目录)
find . -maxdepth 1 -type f -mtime -5 | wc -l
  • -maxdepth 1:只看当前目录,不深入子目录
  • -type f:只统计文件,去掉的话会包含目录
  • -mtime -5:精准匹配修改时间在5天以内的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:38:31