Сценарий резервного копирования: Как сохранить последние N записей? - PullRequest
2 голосов
/ 21 марта 2012

Для резервного копирования мне нужно очистить старые резервные копии.Как сохранить последние N резервных копий и удалить остальные?

Резервная копия - это либо одна папка, либо один файл, и сценарий будет хранить все резервные копии в папках или файлах (без перемешивания).

Если возможно, я бы хотел избегать парсинга вывода ls. Даже если все записи в папке резервной копии должны были быть созданы скриптом резервного копирования, и не должно быть смешныхсимволов в именах записей, хакер может создать там новые записи.

1 Ответ

1 голос
/ 21 марта 2012

Это должно сделать это ( не проверено! ):

#!/usr/bin/env bash
set -o errexit -o noclobber -o nounset -o pipefail
i=0
max=7 # Could be anything you want
while IFS= read -r -d '' -u 9
do
    let ++i    
    if [ "$i" -gt "$max" ]
    then
        rm -- "$REPLY"
    fi
done 9< <(find /var/backup -type f -maxdepth 1 -regex '.*/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\.tar\.gz' -print0 | sort -rz)

Объясняется снаружи:

  1. Убедитесь, что скрипт останавливается при любых распространенных ошибках.
  2. Найти все файлы в / var / backup (и , а не подкаталогах), соответствующие формату YYYY-MM-DD.tar.gz.
  3. Сортируйте их в обратном порядке, чтобы последние были перечислены первыми.
  4. Отправьте их в файловый дескриптор 9. Это позволяет избежать проблем с cat, ssh или другими программами, которые по умолчанию читают стандартный ввод.
  5. Чтение файлов по одному из FD 9, разделенных NUL.
  6. Количество файлов до тех пор, пока вы не превысите заданный максимум.
  7. Ядерный остаток от орбиты.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...