用于保持缓存目录特定大小并根据上次访问删除的脚本

用于保持缓存目录特定大小并根据上次访问删除的脚本

我需要一个脚本来检查目录的大小,如果大于指定的大小,它将检查并删除 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

每周运行一次。

相关内容