![如何删除所有超过 X 天且以数字结尾的文件](https://linux22.com/image/1567589/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E6%89%80%E6%9C%89%E8%B6%85%E8%BF%87%20X%20%E5%A4%A9%E4%B8%94%E4%BB%A5%E6%95%B0%E5%AD%97%E7%BB%93%E5%B0%BE%E7%9A%84%E6%96%87%E4%BB%B6.png)
我们要删除所有以数字结尾的文件,数字以 2 位或 3 位以上为宜
注意 - 当文件以数字结尾时,它告诉我们该文件已旋转并且实际上已使用唯一编号进行备份
例子
-rw-r--r-- 1 kafka hadoop 73668 Aug 5 07:56 controller.log.2018-08-05-07
-rw-r--r-- 1 kafka hadoop 73668 Aug 5 08:56 controller.log.2018-08-05-08
-rw-r--r-- 1 kafka hadoop 658893 Aug 7 11:53 controller.log.3
-rw-r--r-- 1 kafka hadoop 1092 Aug 7 14:35 controller.log.2
-rw-r--r-- 1 kafka hadoop 2750003 Aug 7 14:52 state-change.log.2018-08-07-14
-rw-r--r-- 1 kafka hadoop 3678 Aug 7 14:52 log-cleaner.log.2018-08-07-14
-rw-r--r-- 1 kafka hadoop 199094 Aug 7 14:52 controller.log.2018-08-07-14
-rw-r--r--. 1 kafka hadoop 24431 Aug 7 15:07 kafka.err
-rw-r--r-- 1 kafka hadoop 1147 Aug 7 16:02 server.log.10
-rw-r--r-- 1 kafka hadoop 1061 Aug 7 16:02 server.log.9
-rw-r--r-- 1 kafka hadoop 135465 Aug 7 16:07 server.log.8
-rw-r--r-- 1 kafka hadoop 10278 Aug 7 16:07 server.log.7
-rw-r--r-- 1 kafka hadoop 10350 Aug 7 16:07 server.log.6
-rw-r--r-- 1 kafka hadoop 10353 Aug 7 16:07 server.log.5
-rw-r--r-- 1 kafka hadoop 10322 Aug 7 16:07 server.log.4
-rw-r--r-- 1 kafka hadoop 1272 Aug 7 16:07 log-cleaner.log
-rw-r--r-- 1 kafka hadoop 473322 Aug 7 16:07 controller.log.1
-rw-r--r-- 1 kafka hadoop 170 Aug 7 16:07 controller.log
预期成绩:
-rw-r--r--. 1 kafka hadoop 24431 Aug 7 15:07 kafka.err
-rw-r--r-- 1 kafka hadoop 1272 Aug 7 16:07 log-cleaner.log
-rw-r--r-- 1 kafka hadoop 170 Aug 7 16:07 controller.log
我尝试了这个选项,但是这个选项不起作用
find . -type f -mtime +6 -name '*[0-9]' -print -delete
请帮助我建立正确的语法,
答案1
您需要使用-regex
参数find
。
find . -type f -mtime +6 -regex '^.*[0-9]$' -print -delete
这将匹配并删除所有以数字结尾的文件(请注意,某些扩展名也可以以数字结尾,例如.mp4
)。
还请注意,-mtime
不支持浮点数,并且始终四舍五入到第二天。因此,如果您想删除至少六天前修改过的文件,请提供-mtime +5
。
答案2
请帮助我建立正确的语法。
你使用了什么:
find . -type f -mtime +6 -name '*[0-9]' -print -delete
是正确的语法,但有几点需要注意:
-delete
不可移植。一般来说,的实现find
可能支持也可能不支持。可移植的等价物是-exec rm {} \;
。-name
使用类似 glob 的模式。根据您所在的地区,[0-9]
可能或者可能不会意思是你想要的:它可能匹配不同于 ASCII 十进制数字的一组字符(例如,它可能匹配