gpt4 book ai didi

linux - 如果可用大小超过阈值,从目录中递归删除最旧文件的 Bash 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:56 25 4
gpt4 key购买 nike

我正在寻找一个脚本,如果分区上的可用空间少于 5%,它可以从目录中删除文件(最旧的优先)。

我找到了以下脚本:

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

据我所知,如果 $FILESYSTEM 上使用的空间超过 $CAPACITY %,这将从 CACHEDIR 中删除文件。

但是,我不确定这是否有效,但我确定它不会先删除最旧的。

我希望它删除最少数量的文件(从最旧到最新)以释放空间。

最佳答案

如果/dev/sda1 已满 95% 以上,您的脚本将删除 $CACHEDIR 中的所有文件。做这样的事情:

#!/bin/bash

DIRECTORY="/path/to/your/directory"
CAPACITY=95
while [[ $(df $DIRECTORY | awk 'NR==2 && gsub("%","") {print$5}') -ge $CAPACITY ]];do
rm -rf $(find $DIRECTORY -mindepth 1 -printf '%T+ %p\n' | sort | awk 'NR==1 {print$2}')
done

您可以在 crontab 上运行此脚本,或者执行 while 循环并使用 systemd 对其进行守护进程,以便它在后台继续运行并在每次分区达到 95% 时删除文件。

解释:

df $DIRECTORY 跟踪目录分区并打印它的信息。
awk 'NR==2 && gsub("%","") {print$5}' 打印第二行(相关行,第一行是标题),去掉百分号并打印第 5 列(“使用百分比”列)。
rm -rf 删除以下命令的结果。
找到 $DIRECTORY -mindepth 1 -printf '%T+ %p\n' |排序 | awk 'NR==1 {print$2}' 找到 $DIRECTORY 并打印文件的修改日期,然后对其进行排序 并仅打印第二个字段第一行(最旧的)的(文件名)。

关于linux - 如果可用大小超过阈值,从目录中递归删除最旧文件的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44142730/

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