-2

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

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

这可能吗?

4

3 回答 3

0

如果您不是特定的文件名标准,请使用此

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

请注意,rm、{} 和 \ 之间有空格;

解释

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

阅读此链接以获取更多信息

于 2013-05-21T06:25:16.863 回答
0

有点棘手,首先找出5天前的unix epoch

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

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

于 2013-05-21T06:35:00.937 回答
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 标准化的一大附带好处。:-)

于 2015-06-08T16:25:04.620 回答