![如何删除具有特定日期模式的文件](https://linux22.com/image/140081/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E5%85%B7%E6%9C%89%E7%89%B9%E5%AE%9A%E6%97%A5%E6%9C%9F%E6%A8%A1%E5%BC%8F%E7%9A%84%E6%96%87%E4%BB%B6.png)
在文件夹下/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]*"