我运行 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