根据文件名中的日期删除文件的bash脚本

时间:2014-05-16 21:30:26

标签: bash rm

我正忙于编写一个bash脚本,可以根据文件名中的日期删除文件,例如xxxxxxxxx140516.log。它应该在2014年5月16日后的一天删除该文件。我希望脚本从字符25读取文件,因为这是日期开始,它应该定期检查以查看是否有任何旧文件。目前我的脚本如下所示:

#!/bin/bash 
rm *$(date -d "-1 day" +"%y%m%d")*

此脚本的问题在于,如果计算机未启动并运行几天,则不会删除超过日期的旧文件,也不会在字符25上启动。请帮忙,谢谢

2 个答案:

答案 0 :(得分:1)

for day in {1..7}; do
    rm -f ????????????????????????$(date -d "-$day day" +"%y%m%d").log
done

这将允许脚本不运行一周;你可以改变范围以处理更长的时间。

通配符中有24个?个字符,因此它会找到从字符25开始的日期。

如果找不到匹配的文件,-f选项会使rm不会打印错误消息。 警告:如果您没有该文件的写入权限,它还会阻止它要求确认。

符号{start..end}扩展为从startend的一系列数字,因此{1..10}将是1 2 3 4 5 6 7 8 9 10的缩写。您还可以使用{char1..char2}来获取一系列字符,例如{a..d}a b c d的缩写。

答案 1 :(得分:0)

如果需要,可以使用这些文件的时间戳清除此类日志文件,如下所示:

find <path_to_logs_dir> -mtime +0 -exec rm {} \;

上述命令将清除任何比今天更早的文件。请注意,此命令并不专门查找任何格式的日志文件。我只是假设日志目录只包含日志文件。

此外,您可以过滤掉以下日志文​​件 - &gt;

find <path_to_logs_dir> -name "*.log" -type f -mtime +0 -exec rm {} \;

&#34; -type f&#34;确保它只列出文件而不是目录。