我正忙于编写一个bash脚本,可以根据文件名中的日期删除文件,例如xxxxxxxxx140516.log。它应该在2014年5月16日后的一天删除该文件。我希望脚本从字符25读取文件,因为这是日期开始,它应该定期检查以查看是否有任何旧文件。目前我的脚本如下所示:
#!/bin/bash
rm *$(date -d "-1 day" +"%y%m%d")*
此脚本的问题在于,如果计算机未启动并运行几天,则不会删除超过日期的旧文件,也不会在字符25上启动。请帮忙,谢谢
答案 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}
扩展为从start
到end
的一系列数字,因此{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;确保它只列出文件而不是目录。