我想根据目录名称而不是 unix 时间戳删除五天前的目录。让我们假设目录是这样创建的test_2013-05-20-12:23:43
,依此类推。
我想删除所有早于 5 天的目录,即 16 日之前的目录。
这可能吗?
如果您不是特定的文件名标准,请使用此
find /path/to/files* -mtime +5 -exec rm {} \;
请注意,rm、{} 和 \ 之间有空格;
解释
第一个参数是文件的路径。如上例所示,这可以是路径、目录或通配符。我建议使用完整路径,并确保在没有 exec rm 的情况下运行命令,以确保获得正确的结果。第二个参数 -mtime 用于指定文件存在的天数。如果您输入 +5,它将查找超过 5 天的文件。第三个参数 -exec 允许您传入诸如 rm 之类的命令。这 {} \; 最后需要结束命令。
阅读此链接以获取更多信息
有点棘手,首先找出5天前的unix epoch
$ date --date='5 days ago' +%s
1368599762
然后您可以解析每个目录名称,提取时间部分,将其转换为 unix 纪元时间并比较是否在该日期之前;如果是,请删除它。
如果文件名使用 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 标准化的一大附带好处。:-)