Удалите старые папки + файлы (50 ГБ) из папки, когда share / HD достигает 95% полной емкости

У меня большая доля (~ 5 ТБ), которая заполняется. Теперь я хочу создать скрипт, который удаляет данные из 2 указанных папок. Но это должны быть самые старые файлы / папки, и это необходимо остановить, когда ~ 50 ГБ было удалено, поэтому он не будет удалять все папки.

Изменить. Это необходимо для работы с Samba для моего Synology DS-409. Сценарий должен работать на Synology в / etc / crontab.

Где-то еще они дали мне этот код:

#!/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 $'\0' line < <(find "$dir" -printf '%T@ %p\0' 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 

Это должно работать:

 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 

scai, autodelete.txt – это файл, который я создал в Windows и загружался в общий ресурс linux 🙂 Теперь я сделал этот код в nano из-за проблем с Windows Linux.

Но теперь это дает кучу ошибок

 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