共有/HDがフル容量の95%に達すると、フォルダから最も古いフォルダ+ファイル(50 GB)を削除します。

共有/HDがフル容量の95%に達すると、フォルダから最も古いフォルダ+ファイル(50 GB)を削除します。

ほとんどいっぱいの大きな共有(〜5TB)があります。次に、指定された2つのフォルダからデータを削除するスクリプトを作成したいと思います。ただし、これは最も古いファイル/フォルダでなければならず、50 GBほど削除した場合は停止する必要があるため、すべてのフォルダが削除されるわけではありません。

編集する:これは私のSynology DS-409のSamba共有と一緒に使用する必要があります。このスクリプトは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

ベストアンサー1

これは働きます:

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

おすすめ記事