Скрипт для хранения каталога кеша определенного размера и удаления на основе последнего доступа

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

Я не уверен, есть ли какое-либо программное обеспечение, доступное для обработки этого уже?

1
задан 8 December 2017 в 17:46

1 ответ

Это на самом деле довольно просто:

#!/bin/bash
max_size=2000 # size in kilobytes
i=0
while [[ $(du -s "$1" | awk '{print $1}') > $max_size ]]; do
  i=$(($i+1))
  [[ -z "$file_list" ]] && file_list="$(find "$1" -type f -printf '%T@ %P\n' | sort -n | sed 's/[^ ]* //')"
  rm -f "$(head -n$i <<<"$file_list" | tail -n1)"
done

Запустите его как /path/to/script.sh /path/to/dir, и он проверит, превышает ли /path/to/dir max_size (в килобайтах), и, если это так, удалит самые старые файлы один за другим, пока max_size соответствует или подрезано. Будьте осторожны, это удаляет файлы без пощады , запустите его в терминале с rm -i вместо rm -f, чтобы проверить его функциональность.

Чтобы периодически запускать скрипт, создайте cronjob с crontab -e, например,

@weekly /path/to/script.sh /path/to/dir

, чтобы запустить его еженедельно.

0
ответ дан 8 December 2017 в 17:46

Другие вопросы по тегам:

Похожие вопросы: