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

Есть несколько вариантов:

Получите доступ к серверу, на котором запущен Ubuntu на ARM, и используйте snapcraft на этом устройстве. Установите Ubuntu Mate на Raspberry Pi и используйте snapcraft на этом устройстве (самый популярный вариант) Используйте Qemu (это может потребоваться немного сотрясать)
1
задан 8 December 2017 в 18:46

2 ответа

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

#!/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
ответ дан 18 July 2018 в 01:35

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

#!/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
ответ дан 24 July 2018 в 17:25
  • 1
    Эй, я должен использовать -printf '%A@ %P\n', если я хочу, чтобы он отсортировался по последнему доступу вместо последнего измененного, не так ли? – Michael Lindfors 11 December 2017 в 17:21
  • 2
    Также кажется, что rm только получает имя файла, а не полный путь к файлу, поэтому он не работает, если скрипт не находится в той же папке, что и файлы, которые необходимо удалить? – Michael Lindfors 11 December 2017 в 17:34
  • 3
    @MichaelLindfors Да, %A@ вместо %T@ для последнего доступа. Я забыл /path/to/dir в линии cron и отредактировал его, однако это должно работать независимо от того, где находится скрипт. – dessert 11 December 2017 в 17:46

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

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