Remove pastas + arquivos mais antigos (50GB) de uma pasta quando o compartilhamento / HD atinge 95% da capacidade total

1

Eu tenho uma grande parte (~ 5TB) que está ficando cheia. Agora quero criar um script que exclua dados de duas pastas especificadas. Mas isso precisa ser os arquivos / pastas mais antigos e precisa parar quando ~ 50 GB forem removidos, por isso não excluirá todas as pastas.

Edit: Esta necessidade de trabalhar com compartilhamentos do Samba para o meu Synology DS-409. O script precisa ser executado no Synology em / etc / crontab.

Em algum outro lugar, eles me deram esse código:

    #!/opt/bin/bash
dir=/data/video
min_dirs=3
full=60
logfile=/var/tmp/removed.log

df='df | grep data | awk '{print $5}' | sed s/%//g'
if [ $df -gt $full ]; then
   [[ $(find "$dir" -type d | wc -l) -ge $min_dirs ]] &&
   IFS= read -r -d $'
    #!/opt/bin/bash
dir=/data/video
min_dirs=3
full=60
logfile=/var/tmp/removed.log

df='df | grep data | awk '{print $5}' | sed s/%//g'
if [ $df -gt $full ]; then
   [[ $(find "$dir" -type d | wc -l) -ge $min_dirs ]] &&
   IFS= read -r -d $'%pre%' line < <(find "$dir" -printf '%T@ %p%pre%' 2>/dev/null | sort -z -n)
   file="${line#* }"
   ls -lLd "$file"
   #rm -rf "$file"
   date='date'
   if [ -f "$file" ]; then
      echo "$date $file could not be removed!" >> $logfile
   else
      echo "$date $file removed" >> $logfile
   fi   
fi
' line < <(find "$dir" -printf '%T@ %p%pre%' 2>/dev/null | sort -z -n) file="${line#* }" ls -lLd "$file" #rm -rf "$file" date='date' if [ -f "$file" ]; then echo "$date $file could not be removed!" >> $logfile else echo "$date $file removed" >> $logfile fi fi
    
por Jasper 06.08.2012 / 16:54

2 respostas

4

Isso deve funcionar:

DIRS="a/ b/"
MAXDELBYTES="53687091200" # 50GB
DELBYTES="0"

find $DIRS -type f -printf "%T@ %s %p\n" | sort -r -n | while read time bytes filename
do
    rm -fv "$filename"
    DELBYTES=$((DELBYTES + bytes))

    if [ $DELBYTES -ge $MAXDELBYTES ]; then break; fi
done
    
por 06.08.2012 / 17:43
0

scai, autodelete.txt é um arquivo que eu criei no windows e enviei para um compartilhamento linux :) Agora eu fiz este código no nano por causa dos problemas de código do windows linux.

Mas agora isso dá um monte de erros

root ~/.config # sh autodelete
find: unrecognized: -printf
BusyBox v1.20.2 (2012-08-09 05:49:15 CEST) multi-call binary.

Usage: find [PATH]... [OPTIONS] [ACTIONS]

Search for files and perform actions on them.
First failed action stops processing of current file.
Defaults: PATH is current directory, action is '-print'

        -follow         Follow symlinks

Actions:
        ! ACT           Invert ACT's success/failure
        ACT1 [-a] ACT2  If ACT1 fails, stop, else do ACT2
        ACT1 -o ACT2    If ACT1 succeeds, stop, else do ACT2
                        Note: -a has higher priority than -o
        -name PATTERN   Match file name (w/o directory name) to PATTERN
        -iname PATTERN  Case insensitive -name
        -path PATTERN   Match path to PATTERN
        -ipath PATTERN  Case insensitive -path
        -type X         File type is X (one of: f,d,l,b,c,...)
        -links N        Number of links is greater than (+N), less than (-N),
                        or exactly N
If none of the following actions is specified, -print is assumed
        -print          Print file name
        -exec CMD ARG ; Run CMD with all instances of {} replaced by
                        file name. Fails if CMD exits with nonzero

autodelete: line 11: bytes: not found
    
por 21.08.2012 / 20:26