Я запускаю 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 stat.
Вы можете запускать скрипт каждые три часа, запустив EDITOR=nano crontab -eи добавив следующую строку:
0 */3 * * * bash ~/path/to/script.sh