我需要一个脚本来检查目录的大小,如果大于指定的大小,它将检查并删除 x 个文件,直到它再次低于阈值大小。我希望根据上次访问的时间删除文件,这样一段时间内未使用的文件就会被首先删除。
我不确定是否有任何软件可以处理这个问题?
答案1
这实际上非常简单:
#!/bin/bash
max_size=2000 # size in kilobytes
i=0
while [[ $(du -s "$1" | awk '{print $1}') > $max_size ]]; do
i=$(($i+1))
[[ -z "$file_list" ]] && file_list="$(find "$1" -type f -printf '%T@ %P\n' | sort -n | sed 's/[^ ]* //')"
rm -f "$(head -n$i <<<"$file_list" | tail -n1)"
done
启动它/path/to/script.sh /path/to/dir
,它将测试是否/path/to/dir
超出max_size
(以千字节为单位),如果是,则依次删除最旧的文件,直到max_size
匹配或削减。小心,这会毫不留情地删除文件,在终端中使用 而rm -i
不是 来运行它rm -f
来测试其功能。
要定期启动脚本,请创建一个 cronjob,crontab -e
例如
@weekly /path/to/script.sh /path/to/dir
每周运行一次。