在UNIX中删除特定时间戳的日志目录

时间:2013-05-21 06:19:50

标签: shell unix

我想根据目录名称而不是unix时间戳删除五天前的目录。 我们假设目录的创建方式与test_2013-05-20-12:23:43类似。依此类推。

我想删除5天之前的所有目录,即16日之前。

这可能吗?

3 个答案:

答案 0 :(得分:0)

如果您不具备文件名标准,请使用此

find /path/to/files* -mtime +5 -exec rm {} \;

请注意,rm,{}和\;

之间有空格

解释

第一个参数是文件的路径。这可以是路径,目录或通配符,如上例所示。我建议使用完整路径,并确保在没有exec rm的情况下运行命令以确保获得正确的结果。 第二个参数-mtime用于指定文件的旧天数。如果输入+5,它将找到超过5天的文件。 第三个参数-exec允许您传入诸如rm之类的命令。 {} \;最后需要结束命令。

请阅读此Link了解详情

答案 1 :(得分:0)

这有点棘手,首先要找出5天前的unix时代

$ date --date='5 days ago' +%s
1368599762

然后你可以解析每个目录名称,提取时间部分,在unix纪元时间转换它,并比较if在那个日期之前;如果是,请删除它。

答案 2 :(得分:0)

如果文件名使用的是ISO-8601格式,那么只需进行词法比较就可以了:

oldest=`date -d 'today -5 days' '+test_%F-%T'`
find "$log_dir" -name 'test_*' -print \
  | while read f; do test "$f" '>=' "$oldest" || rm "$f"; done

(未经测试;假设文件名不包含换行符)

这是ISO-8601标准化的一个很好的附带好处。 : - )