【Linux】使用find命令清理指定时间之前的文件

【Linux】使用find命令清理指定时间之前的文件,第1张

说明:

find 后面紧跟的 /root/logs 是要查找的目录,. 表示当前目录

-type f :指定查找对象为文件

-name "*" :指定查找对象名称为任意

-mtime +7 :查找7天以前的老文件

-exec rm -f {} \:执行删除命令,后面有个 {} \ 是必须的

find命令是Linux下面文件检索的工具,功能超强。用于根据时间检索,我们首先要能清楚文件的时间戳。 通常每个文件具备三个时间戳: 【a】上次访问的时间 参数是 -atime 【b】上次属性变更的时间 参数是 -ctime 【c】上次内容变更的时间 参数

使用date命令加上合适的时间格式化字符串(+%s),会显示当前时间(或-d参数指定的时间)与1970-01-01 00:00:00相差的秒数(详细可以参考date的man手册)

所以基本想法就是使用date命令分别获取当前时间与文件修改时间的秒数,然后看这2个秒数之间是否有相差180秒以上。

获取当前时间比较简单,直接date +%s就ok了

下面看看如何获取文件时间

使用stat 命令后面跟一个文件名可以获取文件的状态,包括文件修改时间。其中文件修改时间会单独一行显示,格式如下:Modify: 2013-02-21 17:58:05.404876407 +0800 (具体的精度可能系统不同略微有些差别,但大致格式是这样)

所以我们可以stat myfilename | grep Modify来获取文件的修改时间的信息,然后通过awk分别获取时间的日期和时间段

stat myfilename | grep Modify | awk '{print $2}'  #这句获取了日期段,即上面例子里面的2013-02-21

stat myfilename | grep Modify | awk '{split($3,var,".")print var[1]}' #这句获取了时间段,即上面例子里面的17:58:05,具体关于awk的使用可以参考awk的使用手册

那么现在可以获取文件修改时间与1970-01-01 00:00:00相差的描述了,就是date -d "$file_date $file_time" +%s

那么这个时间与当前时间想减的结果与180相比就可以知道是否满足条件了,满足条件的话就可以执行相应的命令。

参考代码如下:

current_datetime=`date +%s`

filedate=`stat tt.txt | grep Modify | awk '{print $2}'`

filetime=`stat tt.txt | grep Modify | awk '{split($3,var,".")print var[1]}'`

file_datetime=`date -d "$filedate $filetime" +%s

timedelta=`expr $current_datetime - $file_datetime`

if [ "$timedelta" -gt "180" ]then

echo "match condition"

fi


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8493666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存