通过删除 OS X 中最旧的文件来限制文件夹大小

通过删除 OS X 中最旧的文件来限制文件夹大小

我运行 OS X 并且有一个安全摄像头将图像写入文件夹。

有没有办法限制该文件夹的大小,然后删除最旧的文件?

答案1

以下 shell 脚本会反复删除给定文件夹中最旧的文件,直到文件夹大小低于指定的最大总数。

假设:

  • 你已经安装了 GNU find,例如findutils来自 Homebrew
  • 当文件添加速度快于文件夹大小确定速度时,此功能无效

#!/bin/bash

# defensive
set -o nounset
set -o errexit
set -o pipefail

# directory to search
DIR=/Users/danielbeck/test

# max folder size in KB
MAXSIZE=1000

# as long as folder size is greater than limit
while [[ $( du -sk "$DIR" | cut -f1 ) -gt $MAXSIZE ]] ; do

    # find the oldest file (modification time counts)
    FILE="$( gfind "$DIR" -type f -printf '%T+ %p\n' | sort -n | head -n1 | cut -d' ' -f2- )"

    # delete it
    /bin/rm -v "$FILE"

 done

您可以稍微修改一下这个脚本,让它在后台持续运行(使用例如screen),或者让它每分钟(或每隔几分钟)启动一次,例如cron

答案2

另一个 shell 脚本:

cd ~/directory
for f in $(ls -t); do
  sum+=$(stat -f%z "$f")
  ((sum > 10*8)) && rm "$f"
done

10*8是 100 MB。如果文件名包含空格,请IFS=$'\n'在 之前添加for。如果文件名可以解释为 glob 模式,请使用set -f或将 for 循环替换为类似 的内容while IFS= read -r l; do :; done < <(ls -t)。使用GNU stat-c%s代替。-f%z

您可以每三个小时运行一次脚本,方法是运行EDITOR=nano crontab -e并添加如下行:

0 */3 * * * bash ~/path/to/script.sh

相关内容