gpt4 book ai didi

linux - 磁盘满时删除文件的shell脚本

转载 作者:IT王子 更新时间:2023-10-29 00:02:55 26 4
gpt4 key购买 nike

如果缓存目录变得太大,我每天都会通过 CRON 编写一个小脚本来清理我的 linux 上的空间。由于我在 bash 脚本方面真的很新手,我需要你们 linux 专家的一点帮助。

这基本上是逻辑(伪代码)

    if ( Drive Space Left < 5GB )
{
change directory to '/home/user/lotsa_cache_files/'

if ( current working directory = '/home/user/lotsa_cache_files/')
{
delete files in /home/user/lotsa_cache_files/
}
}

获取剩余驱动器空间

我计划从“/dev/sda5”命令中获取剩余的驱动器空间。如果将以下值返回给我以供您引用:

Filesystem           1K-blocks      Used Available Use% Mounted on<br>
/dev/sda5 225981844 202987200 11330252 95% /

因此可能需要一些正则表达式才能从返回值中获取“11330252”

有点偏执

'if (current working directory =/home/user/lotsa_cache_files/)'部分只是我内心偏执狂的一种防御机制。在我继续执行删除命令之前,我想确保我确实在“/home/user/lotsa_cache_files/”中,如果由于某种原因当前工作目录不存在,该命令可能具有破坏性。

删除文件

文件的删除将使用下面的命令而不是通常的 rm -f 来完成:

find . -name "*" -print | xargs rm

这是由于 linux 系统固有的无法在目录包含太多文件的情况下“管理”目录,正如我过去了解到的那样。

最佳答案

只是另一个提议(代码内的注释):

FILESYSTEM=/dev/sda1 # or whatever filesystem to monitor
CAPACITY=95 # delete if FS is over 95% of usage
CACHEDIR=/home/user/lotsa_cache_files/

# Proceed if filesystem capacity is over than the value of CAPACITY (using df POSIX syntax)
# using [ instead of [[ for better error handling.
if [ $(df -P $FILESYSTEM | awk '{ gsub("%",""); capacity = $5 }; END { print capacity }') -gt $CAPACITY ]
then
# lets do some secure removal (if $CACHEDIR is empty or is not a directory find will exit
# with error which is quite safe for missruns.):
find "$CACHEDIR" --maxdepth 1 --type f -exec rm -f {} \;
# remove "maxdepth and type" if you want to do a recursive removal of files and dirs
find "$CACHEDIR" -exec rm -f {} \;
fi

从 crontab 调用脚本进行定时清理

关于linux - 磁盘满时删除文件的shell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5908919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com