求助:如何编写脚本查找指定小时段内修改的文件?
解决脚本查找指定小时修改文件的问题
嘿,我来帮你修正这个脚本~你的思路是对的,但有几个小细节没处理好,导致脚本没法正常工作,我来一步步给你捋清楚:
原脚本的问题点
- 变量引用错误:条件判断里的
N没有加$,bash会把它当成普通字符串,而不是你输入的变量值; - 整数比较运算符不对:bash中整数比较要用
-ge(大于等于)、-le(小于等于),而不是>=、<=; find的时间参数格式错误:"$N:00-59"不是find能识别的时间格式,得用范围条件来限定时间区间。
修正后的完整脚本
echo "Give hour: " read N if [[ $N -ge 0 && $N -le 23 ]]; then # 匹配修改时间在 N:00 到 (N+1):00 之间的文件(即X:00-X:59) find /home/mikepnrs -newermt "$N:00" ! -newermt "$((N+1)):00" else echo "Out of bounds! Please enter an hour between 0 and 23." fi
关键改动说明
- 条件判断优化:用
[[ ]]替代[ ],它支持更直观的&&逻辑运算符,同时变量引用更安全;把判断范围改成0-23(一天的小时范围是0到23,24等价于次日0点,这样更严谨)。 - 时间范围精准匹配:
-newermt "$N:00":筛选修改时间晚于等于指定小时整点的文件;! -newermt "$((N+1)):00":排除修改时间晚于等于下一个小时整点的文件;
两者结合就精准覆盖了X:00到X:59:59这个时间段的所有文件。
比如你输入14,脚本就会找出所有下午2点整到2点59分59秒之间修改的文件,完全符合你的需求~
内容的提问来源于stack exchange,提问作者michaelpnrs
相关产品推荐
相关产品推荐

