在Linux中如何删除指定时间之前修改的文件?
1、与文件有关的时间
在说明如何删除符合这种要求的文件之前,先来看看与文件有关的有哪些时间
简名 全名 中文名 含义
atime access time 访问时间 文件中的数据最后被访问的时间
mtime modify time 修改时间 文件中的数据最后被修改的时间
ctime change time 变化时间 文件的元数据后发生变化的时间。比如权限,所有者等
crtime birth time 创建时间 文件创建时间
2、查看时间的方法
通常使用ls只能看到修改时间,比如:
$ ls -l
total 92
-rw-r--r-- 1 admin 197121 91234 4月 16 10:12 access.log
如果想以格式化的形式显示时间,可以使用--time-style,比如:
$ ls -l --time-style=long-iso
total 92
-rw-r--r-- 1 admin 197121 91234 2024-04-16 10:01 access.log
$ ls -l --time-style=full-iso
total 92
-rw-r--r-- 1 admin 197121 91234 2024-04-16 10:01:37.078490500 +0800 access.log
有没有什么方法将上述4个时间都显示,有的,可以使用stat
$ stat access.log
File: access.log
Size: 91234 Blocks: 92 IO Block: 65536 regular file
Device: 88ca30ch/143434508d Inode: 281474976892461 Links: 1
Access: (0644/-rw-r--r--) Uid: (197108/Administrator) Gid: (197121/ UNKNOWN)
Access: 2024-04-16 10:12:44.423859000 +0800
Modify: 2024-04-16 10:12:42.045405200 +0800
Change: 2024-04-16 10:12:42.044460300 +0800
Birth: -
据查Birth属性linux已废弃,目前状态显示结果均为-
虽然使用stat查不到创建时间,但一般也够用了。如果一定想知道创建时间,可以使用debugfs命令。
这个命令一般需要使用root用户才能执行,它是直接从文件的inode上获取这个时间的
3、针对时间的操作
现在看一下根据时间如何查找文件。可以使用find命令,它提供了一些参数:
-amin n n分钟前访问过的
-atime n n天前访问过的
-cmin n n分钟前变化过的
-ctime n n天前变化过的
-mmin n n分钟前修改过的
-mtime n n天前修改过的
比如查找30天前修改过的文件
find ./ -type f -mtime +30
如果想将这些文件删除,可以直接加上-delete
find ./ -type f -mtime +30 -delete
如果想执行其它命令,可以直接加上-exec
删除N天前的 "文件" 和 "文件夹"
假设, 执行命令的日期是,当月15日
命令解释:
find 查找命令
/root/Text 查找路径
-maxdepth 1 设置搜索目录层级,1层
-mtime 文件最后修改时间
+3 3天前(或理解成从命令执行当前日期开始,当天不算,保留3个文件)
-amin 文件最后修改时间
+10 时间超过10分钟的时间
-type 文件类型
f 指定类型。f是文件;d是目录;f普通文件;l符号连接;
c字符设备;b块设备;s套接字;p Fifo
-name 查询方式为查询文件名
"log.*" 查找log开头后面为任意长度字符的文件(不明白可以找“正则表达式”教程看看)
-exec 固定写法
-ok 固定写法, 和-exec一样功能,但是会提示
rm -f 符合条件的执行删除并不提示
{} 固定写法,会被替换find 找到的文件(夹). 注意左右有空格
\; 固定写法,注意左有空格
为了自动运行,可以加入系统的定时任务
编译(默认用vi)
crontab -e
加入命令, 指定每天中午12点执行,删除90天前的文件(夹)(还可以理解成,保留90天的文件(夹):
* 12 * * * find . -mtime +90 -type f -name "*" -exec \rm -rf {} \;
说明:
第一个号表示时间中的 分钟, 取值范围:0-59
第二个号表示时间中的 小时, 取值范围:0-23
第三个号表示一个月中的第几天,取值范围:1-31
第四个号表示一年中的第几个月,取值范围:1-12
第五个*号表示一个星期中的第几天,以星期天开始依次的取值为0~7,0、7都表示星期天
查看执行列表(默认用vi)
crontab -l
分类:
linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构