在 Linux 上根据需要删除最旧的文件以释放空间

在 Linux 上根据需要删除最旧的文件以释放空间

我有一个将日志写入的 cron 作业/tmp。我想在磁盘中的可用空间小于 1GB 时自动删除最旧的文件。

我正在尝试这样做df -ah /tmp,然后取第二行,使用cut获取avail列。然后在for循环中,继续删除超过 n 天的文件,-mtime直到有足够的可用空间。

我可能还想将其设置为每天运行的 cron 作业。

答案1

不要使用 find -mtime,而是使用 ls -t,例如:

DIR=/tmp
FREESPACE=1000000
find $DIR -type f | xargs ls -1rt | while read f ; do
  if [ `df --output=avail $DIR | tail -1` -ge $FREESPACE ] ; then
    break
  fi
  # rm -f $f
done

取消注释rm -f $f以使其真正发挥作用......

但是,我通常会采取一些不同的做法。我会将我的 cron 日志放在 /var/log 中,并让 logrotate 之类的程序处理磁盘空间管理。或者,作为另一种选择,我会将日志放入单独的子目录(例如 /tmp/mycronjob/*),然后保留固定天数的日志文件。它不像监控磁盘空间那样灵活,但它也是一种直接find /tmp/mycronjob -mtime +30 -exec rm {} \;且更可预测的方法。

相关内容