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