gpt4 book ai didi

Bash 脚本不断删除文件,直到目录大小小于 X

转载 作者:行者123 更新时间:2023-11-29 09:28:05 25 4
gpt4 key购买 nike

我正在尝试编写一个脚本来不断从文件夹 (/home/folder) 中删除文件,直到主目录 (/home/) 的大小小于 X GB。该脚本应该一次删除 25 个文件,这些文件应该是目录中最旧的。但是,我是一个菜鸟,我无法想出各种循环。相反,我在下面多次写了相同的脚本行;它有效,但我想更好地循环。您能帮我解决一个更优雅、更高效的方法吗?

size=$(du -shb /home/ | awk '{print $1}')
if [ "$size" -gt X ]; then
find /home/folder -maxdepth 1 -type f -printf '%T@\t%p\n' | sort -r | tail -n 25 | sed 's/[0-9]*\.[0-9]*\t//' | xargs -d '\n' rm -f
sleep 30
else
exit
fi

最佳答案

还不错!让它循环的最简单方法就是在它周围添加一个无限循环。您的 exit 语句将退出脚本,因此显然也会退出循环:

while true
do
size=$(du -shb /home/ | awk '{print $1}')
if [ "$size" -gt X ]; then
find /home/folder -maxdepth 1 -type f -printf '%T@\t%p\n' | sort -r | tail -n 25 | sed 's/[0-9]*\.[0-9]*\t//' | xargs -d '\n' rm -f
sleep 30
else
exit # <- Loop/script exits here
fi
done

您还可以重写逻辑以使其更漂亮:

while [ "$(du -shb /home/ | awk '{print $1}')" -gt X ]
do
find /home/folder -maxdepth 1 -type f -printf '%T@\t%p\n' | \
sort -n | head -n 25 | cut -d $'\t' -f 2- | xargs -d '\n' rm -f
done

并且您还可以将其重写为不一遍又一遍地迭代 /home,从而允许您删除单个文件而不是 25 个文件 block :

usage=$(du -sb /home | cut -d $'\t' -f 1)
max=1000000000
if (( usage > max ))
then
find /home/folder -maxdepth 1 -type f -printf '%T@\t%s\t%p\n' | sort -n | \
while (( usage > max )) && IFS=$'\t' read timestamp size file
do
rm -- "$file" && (( usage -= size ))
done
fi

关于Bash 脚本不断删除文件,直到目录大小小于 X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25514434/

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