您好。我想从文件夹中删除过去7天内的所有日志文件,但保留所有其他文件。我可以使用以下命令吗?你如何指定它只删除.log扩展名的文件?
find /path/to/file -mtime +7 -exec rm -f {} \;
我是否需要将此命令写入某个文件,或者我可以在命令提示符下编写它并让它每天自动运行?
我不知道如何在linux中运行cron作业。
答案 0 :(得分:19)
使用通配符。只需将其放入crontab
使用 crontab -e 选项即可编辑crontab作业。
参见示例:
* * * * * find /path/to/*.log -mtime +7 -exec rm -f {} \;
Just to increment the answer check this nice article on how to work with your crontab
! in Linux .
编辑:将corntab更新为crontab
答案 1 :(得分:9)
您可以通过运行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时,会省略用户名字段,因为用户是通过文件名推断出来的(请参阅第一段)。
话虽如此,您的参赛作品应如下所示:
* * * * * find /path/to/*.log -mtime +7 -delete
当-exec
选项完全符合您的要求时,请不要使用-delete
选项。 exec为每个文件分配一个shell,并且过度浪费系统资源。
完成后,您可以使用crontab -l
列出您的个人crontab。
PS。大多数Linux系统上的默认编辑器是vi,如果你不了解vi,可以通过设置environ变量export EDITOR=nano
答案 2 :(得分:4)
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 {} \;
答案 3 :(得分:4)
您应该使用crontab -e
编辑crontab并安排作业。它可能看起来像这样:
* 1 * * * /usr/bin/find /path/to/file -name '*.log' -mtime +7 -exec rm -f {} \;
这将每天凌晨1点以递归方式删除目录/ path / to / file中的所有.log文件。
答案 4 :(得分:2)
由于这是关于日志文件,您应该查看logrotate
。它每天从系统cron作业运行,并根据/etc/logrotate.conf文件中的规则为您轮换日志,该文件通常包含/etc/logrotate.d目录。所以不需要crontab也不需要。
如果您无权将文件添加到/etc/logrotate.d以进行自己的配置,也可以拥有自己的cron作业。
/etc/logrotate.d中有很多例子。
它希望您的应用程序写入单个文件。它不适用于每天登录到不同日志文件的应用程序。应用程序通常不需要这样做。如果应用程序保持日志文件处于打开状态,则logrotate可以运行postrotate脚本来告诉应用程序重新打开日志文件。
答案 5 :(得分:0)
在搜索了这个特定主题之后,我发现很多人都建议使用 -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
答案 6 :(得分:0)
你们正在努力地做到这一点。尝试使用清除命令
* * * * 0 clear > /home/user/CronLog.txt:
其中0是星期日,7是星期六。 “>”将清除日志,并添加到“ >>”。如果您的日志文件是root用户,则在这样的“ clear”之前输入“ root”
* * * * 0 root clear > /home/user/CronLog.txt
答案 7 :(得分:0)
这将删除7天之前的日志文件
* * * * * find /path/to -name '*.log' -mtime +7 -exec rm -f {} \;
这将删除30分钟之前的日志文件
* * * * * find /path/to -name '*.log' -mmin +30 -exec rm -f {} \;