如何基于特定时间戳(date +%d-%m-%y_%H.%M)查找创建或修改的文件?
基于特定时间戳查找文件的命令推荐
我来帮你梳理下适配%d-%m-%y_%H.%M格式时间戳的文件查找命令,主要围绕修改时间和创建时间两种场景展开,不同系统的处理方式略有区别:
一、查找基于修改时间(mtime)的文件
find工具是跨系统处理这类需求的首选,尤其是GNU版本的find,对自定义时间格式支持很好。假设你的目标时间戳是类似05-10-24_14.30这样的格式,可以用以下几种方式:
1. 匹配单个时间点的前后文件
直接用-newermt参数结合-datefmt指定你的时间格式,无需手动转换时间字符串:
# 查找在指定时间之后修改的文件 find /path/to/search -type f -newermt "05-10-24_14.30" -datefmt "%d-%m-%y_%H.%M" # 查找在指定时间之前修改的文件,加!取反即可 find /path/to/search -type f ! -newermt "05-10-24_14.30" -datefmt "%d-%m-%y_%H.%M"
2. 匹配时间范围内的文件
如果要找某个时间窗口内修改的文件,结合两个-newermt条件就能实现:
# 查找 05-10-24_14.30 到 05-10-24_15.00 之间修改的文件 find /path/to/search -type f \ -newermt "05-10-24_14.30" -datefmt "%d-%m-%y_%H.%M" \ ! -newermt "05-10-24_15.00" -datefmt "%d-%m-%y_%H.%M"
二、查找基于创建时间(birth time)的文件
创建时间的处理在Linux和macOS上有差异,分开来说:
1. Linux系统(需文件系统支持birth time)
大部分现代Linux文件系统(比如ext4)都记录文件的创建时间,GNU find支持-newerbt参数,用法和-newermt完全一致:
# 查找指定时间之后创建的文件 find /path/to/search -type f -newerbt "05-10-24_14.30" -datefmt "%d-%m-%y_%H.%M"
注意:如果你的系统用的是旧文件系统(比如ext3),可能不支持创建时间的记录,这种情况下该参数会失效。
2. macOS系统
macOS的BSD find提供了两种方式来匹配创建时间:
方式一:借助临时文件
先创建一个带有目标时间戳的临时文件,再用-Bnewer参数匹配:
# 将目标时间戳转换为macOS touch支持的格式,创建临时文件 touch -t $(date -j -f "%d-%m-%y_%H.%M" "05-10-24_14.30" +"%Y%m%d%H%M.%S") /tmp/timestamp_temp # 查找创建时间晚于临时文件的文件 find /path/to/search -type f -Bnewer /tmp/timestamp_temp # 用完记得清理临时文件 rm /tmp/timestamp_temp
方式二:直接指定时间格式
macOS的find也支持-newerBt参数和-d指定时间格式,写法更简洁:
find /path/to/search -type f -newerBt "05-10-24_14.30" -d "%d-%m-%y_%H.%M"
额外小贴士
- 版本兼容性:GNU find(Linux)和BSD find(macOS)参数细节有差异,上面的命令都是对应系统的稳定写法。
- 年份问题:两位年份(比如
24)会被默认识别为2024,如果要指定19XX年,建议直接用四位年份格式。 - 多条件组合:如果需要同时匹配创建和修改时间,直接把两个条件放在
find命令里即可,比如:
# Linux下查找指定时间之后创建且修改的文件 find /path/to/search -type f \ -newerbt "05-10-24_14.30" -datefmt "%d-%m-%y_%H.%M" \ -newermt "05-10-24_14.30" -datefmt "%d-%m-%y_%H.%M"
内容的提问来源于stack exchange,提问作者santhosh gupta
相关产品推荐
相关产品推荐

