如何删除具有特定日期模式的文件

如何删除具有特定日期模式的文件

在文件夹下/var/log/roler_t,我们有以下文件:

-rw-r--r-- 1 roler smike    37652 Jun 25 01:44 2018-06-23T02:KJU:00
-rw-r--r-- 1 roler smike    41742 Jun 25 01:45 2018-06-21T20:KJU:00
-rw-r--r-- 1 roler smike    36762 Jun 25 01:46 2018-06-22T08:KJU:00
-rw-r--r-- 1 roler smike    51764 Jun 25 01:47 PL-06-23T12:KJU:00
-rw-r--r-- 1 roler smike    42751 Jun 25 01:48 2018-06-21T16:KJU:00
-rw-r--r-- 1 roler smike    34627 Jun 25 01:49 2018-06-22T23:KJU:00
-rw-r--r-- 1 roler smike    59828 Jun 25 01:51 2018-06-23T05:KJU:00
-rw-r--r-- 1 roler smike    33561 Jun 25 01:52 2018-06-22T20:KJU:00
-rw-r--r-- 1 roler smike    59828 Jun 25 01:51 JFG:KJU:00
-rw-r--r-- 1 roler smike    33561 Jun 25 01:52 PL-22T20:KJU:00
-rw-r--r-- 1 roler smike    36643 Jun 25 01:53 2018-06-22T01:KJU:00

我们如何才能仅删除十天以上且具有特定日期模式的文件,例如2018-06-23.

预期结果如下:

以下文件将保留在/var/log/roler_t

-rw-r--r-- 1 roler smike    51764 Jun 25 01:47 PL-06-23T12:KJU:00
-rw-r--r-- 1 roler smike    59828 Jun 25 01:51 JFG:KJU:00
-rw-r--r-- 1 roler smike    33561 Jun 25 01:52 PL-22T20:KJU:00

答案1

您可以使用该命令按日期过滤文件find

例如:

find /var/log/roler_t -mtime +10

返回所有文件修改日期> 10 天。

-atime同样,您可以使用(访问时间)、 (状态更改时间)等标志-ctime,但我认为-mtime这就是您正在寻找的。

如果你想用一个命令删除它们(但我建议你总是之前检查一下结果是否find符合您的预期):

find /var/log/roler_t -mtime +10 -exec rm {} \;

答案2

这与您之前的问题类似,您可以通过以下方式实现

$ find /var/log/roler_t -mtime +10 -name "XXXX-XX-XX*"

其中 XXXX-XX-XX 是您要查找的日期戳。如果你知道年月日对应于您要查找的修改时间,您可以将 -name 选项的参数更改为如下所示:

$find /var/log/roler_t -mtime +10 -name "`date -d'now - 10 days' +'%y-%m-%d'*"

自动生成文件名前缀,尽管您可能需要使用 date 命令减去天数,以确保 mtime 和日期戳与您需要的相匹配。

如果您只想匹配以类似日期戳的字符串开头的文件名,例如“2018-09-13”,请使用以下命令:

/var/log/roler_t -mtime +10 -name "[12][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]*"

相关内容