删除超过 30 天的文件的脚本

删除超过 30 天的文件的脚本

Shell 脚本不应删除*根目录*下的任何文件。我的*路径将类似于 /export/home/ftp/...

我做了一些研究,找到了使用 find 和 exec 命令从特定路径查找和删除超过 30 天的文件的方法。

*find /export/home/ftp/-type f-mtime +30-exec rm-f {} \;

但是根据要求,我只想从该目录中删除 console.log 和 server.log 并排除剩余的文件。

请帮助我解决这个问题。

答案1

假设您确实需要使用find才能递归通过子目录:

find /export/home/ftp \( -name console.log -or -name server.log \) -mtime +30 -exec rm -f {} +

答案2

如果您只需要每月删除旧的 server.log 和 console.log,您也可以使用logrotate很可能已经在 RHEL 下运行的版本。像这样的配置片段可以/etc/logrotate.d/*.conf在系统上配置文件所在的任何地方使用。

# rotate server.log and console.log every month
# delete, not compress, old file

/export/home/ftp/server.log /export/home/ftp/console.log {
    monthly
    rotate 0
}

如上所述,自定义每月 cron 也很好用。事实上,由于 logrotate 是从 cron 运行的,因此您可以将其视为某种 cron 扩展。HTH。

答案3

为什么不直接使用每月一次的 cron?

@monthly /usr/bin/rm -f console.log @monthly /usr/bin/rm -f server.log

这肯定比使用 find 做事更安全。

答案4

另一种方法是使用 xargs,它显然更有效率——http://www.sunmanagers.org/pipermail/summaries/2005-March/006255.html

所以你可以做这样的事情:

find /export/home/ftp -maxdepth 1 \( -name console.log -or -name server.log \) -mtime +30 | xargs -O -r rm

相关内容