Я запускаю OS X и у меня есть камера безопасности, которая записывает изображения в папку.

Есть ли способ ограничить размер этой папки, а затем удалить самый старый файл?

2 ответа2

3

Следующий скрипт оболочки несколько раз удаляет самый старый файл в данной папке, пока размер папки не станет меньше указанного максимального общего количества.

Предположения:

  • У вас установлен GNU, например, 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 .

0

Еще один скрипт оболочки:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .