嗨。我想从文件夹中删除过去7天的所有日志文件,但保留所有其他文件。我可以使用以下命令吗?如何指定它只删除扩展名为.log的文件?
find /path/to/file -mtime +7 -exec rm -f {} ;
我需要把这个命令写进某个文件吗?或者我可以在命令提示符下写它,让它每天自动运行吗?
我不知道如何在linux中运行cron作业。
使用通配符。只需将其放在crontab
中,即可使用crontab -e
选项编辑crontab作业
参见示例:
* * * * * find /path/to/*.log -mtime +7 -exec rm -f {} ;
为了增加答案,请查看这篇关于如何使用crontab
的好文章!在Linux中。
通过运行crontab -e
编辑个人crontab。这将保存到/var/spool/cron/<username>
。该文件将是所有者的用户名,因此root将是/var/spool/cron/root。文件中的所有内容都以文件所有者的身份运行。
crontab的语法如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
当您通过crontab -e
编辑自己的个人crontab时,您可以省略用户名字段,因为用户是由文件名推断的(请参阅第一段(。
话虽如此,你的条目应该是这样的:
0 5 * * * find /path/to/*.log -mtime +7 -delete
这将在系统时间每天早上5:00运行。我认为你不需要它比每天更频繁地运行,因为你正在删除7天的文件。
请不要过度使用-exec
选项,因为-delete
选项正是你想要做的。exec为每个文件分叉一个shell,这会过度浪费系统资源。
完成后,您可以使用crontab -l
列出您的个人crontab。
ps。大多数Linux系统上的默认编辑器是vi,如果您不了解vi,请通过设置环境变量export EDITOR=nano
来使用类似nano的简单编辑器
find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} ;
要创建cron作业,请在/etc/cron.daily目录中放入一个包含以下内容的文件:
#!/bin/sh
find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} ;
您应该使用crontab -e
来编辑crontab并安排作业。它可能看起来像这样:
* 1 * * * /usr/bin/find /path/to/file -name '*.log' -mtime +7 -exec rm -f {} ;
这将在每天凌晨1点递归地删除目录/path/to/file中的所有.log文件。
由于这是关于日志文件的,您应该查看logrotate
。它每天从系统cron作业运行,并将根据/etc/logrotate.conf文件中的规则为您旋转日志,该文件通常包括/etc/logrotate.d目录。所以不需要crontab也不需要find。
如果您没有权限为自己的配置向/etc/logrotate.d添加文件,那么您也可以拥有自己的cron作业。
/etc/logrotate.d.中有很多例子
它希望您的应用程序写入单个文件。它不适用于每天登录到不同日志文件的应用程序。应用程序通常不需要这样做。如果应用程序保持日志文件打开,logrotate可以运行postrotate脚本来告诉应用程序重新打开日志文件。
你们做得很艰难。尝试使用清除命令
* * * * 0 clear > /home/user/CronLog.txt:
其中0为周日,7为周六。">"将清除日志,与添加到日志中的">>"类似。如果你的日志文件是root,那么在"清除"之前键入"root",就像这个
* * * * 0 root clear > /home/user/CronLog.txt
在谷歌上搜索了这个特定的主题后,我发现许多人建议使用-delete选项,如下所示:
* * * * * find /path/to/*.log -mtime +7 -delete;
此版本的好处是易于记忆,并且性能更好,因为-exec将为要删除的每个文件生成一个新进程。
以下是一些参考资料:https://linuxaria.com/howto/linux-shell-how-to-use-the-exec-option-in-find-with-examples
https://unix.stackexchange.com/questions/167823/find-exec-rm-vs-delete
这将删除早于7天的日志文件
* * * * * find /path/to -name '*.log' -mtime +7 -exec rm -f {} ;
这将删除超过30分钟的日志文件
* * * * * find /path/to -name '*.log' -mmin +30 -exec rm -f {} ;