嗨。我想从文件夹中删除过去 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
编辑自己的
personalcrontab 时,您会省略用户名字段,因为用户是通过文件名推断出来的(请参阅第一段)。
话虽如此,您的条目应该如下所示:
0 5 * * * find /path/to/*.log -mtime +7 -delete
这将在每天系统时间凌晨 5:00 运行。鉴于您要删除 7 天旧的文件,我认为您不需要它比每天更频繁地运行。
当-exec
选项完全符合您的要求时,请不要过度使用
-delete
选项。 exec 为每个文件创建一个 shell,并且过度浪费系统资源。完成后,您可以使用
crontab -l
列出您的个人 crontab。ps。大多数 Linux 系统上的默认编辑器是 vi,如果您不知道 vi,请通过设置环境变量来使用简单的东西,例如 nano
export EDITOR=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 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
* * * * * find /path/to -name '*.log' -mtime +7 -exec rm -f {} \;
这将删除超过 30 分钟的日志文件
* * * * * find /path/to -name '*.log' -mmin +30 -exec rm -f {} \;