随笔 - 25  文章 - 1  评论 - 1  阅读 - 18865

在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

 

posted on   ubirdy  阅读(158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示