Limitar o tamanho da pasta excluindo os arquivos mais antigos no OS X

0

Eu corro o OS X e tenho uma câmera de segurança escrevendo imagens em uma pasta.

Existe uma maneira de limitar o tamanho desta pasta e, em seguida, excluir o arquivo mais antigo?

    
por user242684 02.08.2013 / 04:18

2 respostas

3

O script de shell a seguir exclui o arquivo mais antigo da pasta especificada repetidamente até que o tamanho da pasta esteja abaixo do total máximo especificado.

Suposições:

  • Você tem o GNU find instalado, por exemplo findutils do Homebrew
  • Não funciona quando arquivos são adicionados mais rapidamente do que o tamanho da pasta pode ser determinado
#!/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

Você pode modificar este script um pouco para que ele seja executado de forma persistente em segundo plano (usando, por exemplo, screen ) ou para que ele seja iniciado a cada minuto (ou em intervalos de alguns minutos) usando, por exemplo, cron .

    
por 02.08.2013 / 04:58
0

Outro script de shell:

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

10*8 é 100 MB. Se os nomes de arquivos contiverem espaços, adicione IFS=$'\n' antes de for . Se os nomes dos arquivos puderem ser interpretados como padrões glob, use set -f ou substitua o loop for por algo como while IFS= read -r l; do :; done < <(ls -t) . Use -c%s em vez de -f%z com o stat GNU.

Você pode executar o script a cada três horas executando EDITOR=nano crontab -e e adicionando uma linha como esta:

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

    
por 02.08.2013 / 21:27

Tags