Я запускаю OS X и у меня есть камера безопасности, которая записывает изображения в папку.
Есть ли способ ограничить размер этой папки, а затем удалить самый старый файл?
Я запускаю OS X и у меня есть камера безопасности, которая записывает изображения в папку.
Есть ли способ ограничить размер этой папки, а затем удалить самый старый файл?
Следующий скрипт оболочки несколько раз удаляет самый старый файл в данной папке, пока размер папки не станет меньше указанного максимального общего количества.
Предположения:
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
.
Еще один скрипт оболочки:
cd ~/directory
for f in $(ls -t); do
sum+=$(stat -f%z "$f")
((sum > 10*8)) && rm "$f"
done
10*8
- это 100 МБ. Если имена файлов содержат пробелы, добавьте IFS=$'\n'
перед for
. Если имена файлов можно интерпретировать как шаблоны glob, используйте set -f
или замените цикл for на что-то вроде while IFS= read -r l; do :; done < <(ls -t)
. Используйте -c%s
вместо -f%z
со статистикой GNU.
Вы можете запускать скрипт каждые три часа, запустив EDITOR=nano crontab -e
и добавив строку, подобную этой:
0 */3 * * * bash ~/path/to/script.sh