Мне нужен скрипт, который будет проверять размер каталога, и если он больше указанного размера, он будет проходить и удалять x количество файлов, пока он снова не станет ниже порогового размера. И я хотел бы, чтобы файлы удалялись на основе последнего обращения, чтобы файлы, которые не использовались в течение некоторого времени, удаляются первыми.
Я не уверен, есть ли какое-либо программное обеспечение, доступное для обработки этого уже?
Это на самом деле довольно просто:
#!/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
, чтобы запустить его еженедельно.