Назад | Перейти на главную страницу

Как оптимизировать процесс резервного копирования SVN в сценарии bash?

У меня есть сценарий оболочки, работающий в AIX, который каждую ночь будет делать резервную копию каждого репозитория SVN. Выполнение выглядит следующим образом:

Загрузите каждое хранилище репозитория в виде файла дампа:

svnrdump on repo_A

svnrdump on repo_B

svnrdump on repo_X ## X is the subsequent number of repository

После завершения процесса загрузки содержимое будет заархивировано:

bzip2 --compress repo_A_yyyymmdd.dump

bzip2 --compress repo_B_yyyymmdd.dump

bzip2 --compress repo_X_yyyymmdd.dump ## X is the subsequent number of backup copy

Затем я проведу уборку резервных копий, удалив те копии, которым больше 5 дней с сегодняшнего дня (мне нужно сохранить только последние 5 последних резервных копий):

rm `ls -t repo_A_????????.dump.bz2 | tail -n +6`

rm `ls -t repo_B_????????.dump.bz2 | tail -n +6`

rm `ls -t repo_X_????????.dump.bz2 | tail -n +6` ## X is the subsequent number of backup copy

Мой вопрос

Есть ли способ оптимизировать этот код, поместив эти repo name в массив, а затем выполнить каждую команду для каждого репо в цикле?

Попробуйте что-то вроде этого:

Первая форма, массив суффиксов:

#!/bin/bash

array=(A B C D E F)
for i in "${array[@]}"
do
    echo svnrdump on repo_$i
    echo bzip2 --compress "repo_$i.dump"
done

Вторая форма, если названия репо более разнообразны:

#!/bin/bash

while read REPO; do
    echo svnrdump on  "${REPO}"
    echo bzip2 --compress "${REPO}".dump
done << REPOLIST
repo0
repo1
repo2
repo3
REPOLIST

Вам нужно будет добавить все репо в РЕПОЛИСТ.

Или альтернативно:

repodir=/some/path
backupdir=/some/otherpath
maxagedays=6
for repo in repo_A repo_B repo_X; do
   svnadmin dump $repodir/$repo | bzip2 -9 > $backupdir/$repo-`date +%F`.dump.bz2
done
find /$backupdir -type f -iname *dump.bz2 -mtime +$maxagedays -exec rm -f {} \;