Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在UNIX中删除特定时间戳的日志目录_Shell_Unix - Fatal编程技术网

Shell 在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的情况下运行该命令,以

我想根据目录名而不是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时代

$ 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,而是使用目录名。