Bash 如何在unix中删除特定文件

Bash 如何在unix中删除特定文件,bash,shell,unix,unix-timestamp,Bash,Shell,Unix,Unix Timestamp,我们在服务器实例的/wslogs/instance\u name目录下有一些文件,这些都是每天创建的日志文件 我正在寻找一个脚本自动删除这些文件的日期为基础。 因此,让我们假设删除超过10天的文件。问题是文件名不是纯日期格式,而是日期格式 hostname_%m%d%Y_access.log and hostname_%m%d%Y_error.log 例如,ra70960708\u 12042016\u access.log和ra70960708\u 12042016\u error.log(

我们在服务器实例的
/wslogs/instance\u name
目录下有一些文件,这些都是每天创建的日志文件

我正在寻找一个脚本自动删除这些文件的日期为基础。 因此,让我们假设删除超过10天的文件。问题是文件名不是纯日期格式,而是日期格式

hostname_%m%d%Y_access.log and hostname_%m%d%Y_error.log
例如,
ra70960708\u 12042016\u access.log
ra70960708\u 12042016\u error.log
(其中
ra70960708
是服务器名称或主机名)

我正在尝试使用
rm
命令,但如果必须删除比当前日期早10天的文件,则无法确定如何在此处指定这些文件

任何帮助都将不胜感激

干杯


Ashley忘记了名字,改为使用修改时间:

下面将列出当前目录中与glob:
hostname\u*\ u error.log匹配的文件,这些文件是在10天前最后一次修改的:

find . -maxdepth 1 -mindepth 1 \
  -type f -name 'hostname_*_error.log' \
  -mtime +10
然后可以使用
-delete
删除它们


是要搜索的目录。

忘记了名称,改为使用修改时间:

下面将列出当前目录中与glob:
hostname\u*\ u error.log匹配的文件,这些文件是在10天前最后一次修改的:

find . -maxdepth 1 -mindepth 1 \
  -type f -name 'hostname_*_error.log' \
  -mtime +10
然后可以使用
-delete
删除它们


是要搜索的目录。

忘记名称,改用修改日期。如果日志是由
logrotate
生成的,那么只需使用
maxage 10
@和lrc,您能详细说明什么是修改日期吗here@RuslanOsmanov:-你能帮我介绍一下如何使用maxage 10吗。我们确实使用rotatelogs,httpd.conf文件中有这些错误日志和自定义日志的条目,如:-ErrorLog“|/usr/HTTPServer/bin/rotatelogs/wslogs/instance_name/
hostname
%m%d%Y_error.log 86400”CustomLog“|/usr/HTTPServer/bin/rotatelogs/wslogs/instance_name/
hostname
%m%d%Y_access.log 86400" combined@Ashley啊。我是说。就个人而言,我宁愿使用logrotate而不是忘记名称,而是使用修改日期。如果日志是由
logrotate
生成的,那么只需使用
maxage 10
@和LRC,您能详细说明什么是修改日期吗here@RuslanOsmanov:-你能帮我介绍一下如何使用maxage 10吗。我们确实使用rotatelogs,httpd.conf文件中有这些错误日志和自定义日志的条目,如:-ErrorLog“|/usr/HTTPServer/bin/rotatelogs/wslogs/instance_name/
hostname
%m%d%Y_error.log 86400”CustomLog“|/usr/HTTPServer/bin/rotatelogs/wslogs/instance_name/
hostname
%m%d%Y_access.log 86400”combined@Ashley个人而言,我宁愿使用logrotate而不是@user2182349:但是最好使用
-exec rm{}+
或者,如果make的变体支持它,
-delete
@JonathanLeffler:-您能帮助我理解我们如何使用-exec rm{}来获得andlrc建议的解决方案吗?这是否意味着:-find.-maxdepth 1-mindepth 1 \-type f-name'hostname\*\u error.log'\-mtime+10-exec rm}如果我能使用完整的unix命令集来实现这一点,那就太好了purpose@andlrc:-感谢您提供的提示解决方案。我将尝试此方法。不过,我只是想确认一下,我们如何在此处执行整个命令集。是否首先找到。-maxdepth 1-mindepth 1 \-键入f-name“hostname”\u*\ u error.log'\-mtime+10,然后在ne中w行-删除,如果是,那么我们选择删除什么。这里的任何澄清都会很有帮助,因为我是unix新手。@Ashley反斜杠(\)为了可读性增加了换行符。如果您希望所有内容都在一行中,它将类似于:
find.-maxdepth 1-mindepth 1-type f-name…-mtime+10-delete
命令的所有选项都是
find
@andlrc:太好了,感谢您的解决方案和澄清。我将测试它,看看它是否真的删除了一个所有这些日志文件只能追溯到10天或更久的时间。@user2182349:但是最好使用
-exec rm{}+
或者,如果make的变体支持它,
-delete
@JonathanLeffler:-你能帮我理解如何使用-exec rm{}吗以下是andlrc建议的解决方案。这是否意味着:-find.-maxdepth 1-mindepth 1 \-type f-name'hostname\u*\ u error.log'\-mtime+10-exec rm{}如果我能使用完整的unix命令集来实现这一点,那就太好了purpose@andlrc:-感谢您提供的提示解决方案。我将尝试此方法。不过,我只是想确认一下,我们如何在此处执行整个命令集。是否首先找到。-maxdepth 1-mindepth 1 \-键入f-name“hostname”\u*\ u error.log'\-mtime+10,然后在ne中w行-删除,如果是,那么我们选择删除什么。这里的任何澄清都会很有帮助,因为我是unix新手。@Ashley反斜杠(\)为了可读性增加了换行符。如果您希望所有内容都在一行中,它将类似于:
find.-maxdepth 1-mindepth 1-type f-name…-mtime+10-delete
命令的所有选项都是
find
@andlrc:太好了,感谢您的解决方案和澄清。我将测试它,看看它是否真的删除了一个所有这些日志文件只能追溯到10天以前。