自动摘要
正在生成中……
在 Linux 系统中,标准的文件系统(如 ext4, xfs)通常不直接记录“创建时间”(Birth time),而是记录访问时间(atime)、修改时间(mtime)和状态改变时间(ctime)。
不过,现代内核和文件系统已经开始支持 btime(Birth time)。以下是针对不同需求的操作方案:
1. 使用修改时间(最常用)
在大多数场景下,文件的修改时间(mtime)能满足你的需求。
find . -maxdepth 1 -type f -mmin +180 -delete
2. 使用创建时间(适用于支持 btime 的系统)
如果你确定需要根据创建时间(例如 Ubuntu 24.04 或 Debian 12 默认文件系统通常支持),可以使用 find 的 -newerXY 参数。
# 找到当前目录下,创建时间早于 3 小时前的普通文件并删除
find . -maxdepth 1 -type f -not -newermt "3 hours ago" -delete
命令参数详解
-
.:代表当前目录。
-
-maxdepth 1:非常重要。这确保只处理当前层级的文件,不会误删子目录里的内容。
-
-type f:只针对文件,不处理文件夹。
-
-mmin +180:修改时间在 180 分钟(3 小时)之前。
-
-newermt:这是一个强大的谓词,m 代表修改时间,t 代表后续是一个时间字符串。配合 -not 使用可以锁定创建/修改早于某个时间点的文件。
-
-delete:直接删除。建议在正式执行前,先将 -delete 替换为 -ls 确认文件列表是否正确。
进阶:安全确认模式
如果你想先看看哪些文件会被删,可以运行:
find . -maxdepth 1 -type f -not -newermt "3 hours ago" -ls
如果需要写进 crontab 脚本
建议使用绝对路径并配合 vi 编辑你的清理脚本:
#!/bin/bash
# 清理指定目录 3 小时前的文件
TARGET_DIR="/path/to/your/folder"
find "$TARGET_DIR" -maxdepth 1 -type f -mmin +180 -exec rm -f {} \;