Shell 在UNIX中删除特定时间戳的日志目录
我想根据目录名而不是unix时间戳删除五天以前的目录。 让我们假设创建的目录类似于Shell 在UNIX中删除特定时间戳的日志目录,shell,unix,Shell,Unix,我想根据目录名而不是unix时间戳删除五天以前的目录。 让我们假设创建的目录类似于test_2013-05-20-12:23:43等等 我想删除所有5天前的目录,即16日之前的目录 可以这样做吗?如果您不明确文件名标准,请使用此选项 find /path/to/files* -mtime +5 -exec rm {} \; 注意,rm、{}和\之间有空格 解释 第一个参数是文件的路径。这可以是路径、目录或通配符,如上例所示。我建议使用完整路径,并确保在不使用exec rm的情况下运行该命令,以
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时代
$ 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标准化的一大附带好处。:-) 它显示的错误类似于find:path必须位于表达式用法之前:find[-H][L][p][path…][expression]find logTest/logTest_*-mtime+5 rm{};谢谢Zigma,但是+5意味着它将删除过去7天的文件,而不是5天。问题是不要使用mtime,而是使用目录名。