Если хочешь быть здоров - сохраняйся и не слушай докторов...

CORPSE аватар

Я принёс вам ещё одну небольшую полезняшку, тоже связанную с резервным копированием. Давно ей пользуюсь и на работе и дома.

Иногда бывает, когда редактируешь какой-нибудь конфигурационный файлик, мысли о том, что надо было сначала сделать его резервную копию, приходят как-то после того, как ты его уже сохранил с изменениями, не оправдавшими твоих ожиданий. У кого такого никогда не было, может кинуть в меня чем-нибудь не очень тяжёлым. :) Так вот, однажды напоровшись на вышеобозначенные грабли, я решил избавиться от них раз и навсегда.

Принцип боевых действий: вместо редактора (я использую vim), запускаем скрипт, указывая в качестве параметра файл, который мы хотим отредактировать. Скрипт проверяет, существует ли этот файл и есть ли у нас права на запись, если нет - вежливо посылает пользователя лесом. Если же мы можем его отредактировать, то он вычисляет контрольную сумму, архивирует файл и сохраняет в специальную директорию для бекапов, добавляя к его имени путь и дату со временем, чтобы не пришлось играть в игру "Что? Где? Когда?", после чего запускает редактор, уже упомянутый вим. После того, как редактор закрыт, скрипт снова вычисляет контрольную сумму файла. Если файл не изменился, то хранить его резервную копию нет смысла, она будет удлена, о чём пользователь будет предупреждён.

Скрипт я добавил в PATH и назвал vimm (кто хочет, может сделать симлинк или алиас - без разницы). Уже привык набирать vim , а теперь просто ещё раз задеть кнопку с буквой m и мы получим в результате изменения резервную копию. Надеюсь, кому-нибудь пригодится. :))

#!/bin/bash

#Формат даты и времени, добавляемых к файлу
DT="$( date +%Y.%m.%d-%H.%M.%S )"

#Путь для создания резервных копий
PREF="/path/to/backup"

if [ -w "$1" ]; then
        case "$1" in
                /*)
                        FNAME="$1"
                        ;;
                *)
                        FNAME="$(pwd)""/$1"
                        ;;
                esac

        MD5B="$(md5sum $1)"
        FNAME="$(echo $FNAME- | sed s#/#_#g )$DT.gz"

        gzip -c "$1" > "$PREF/$FNAME"

        vim "$1"

        MD5A="$(md5sum $1)"

        if [ "$MD5B" = "$MD5A" ]; then
                rm "$PREF/$FNAME" > /dev/null
                echo "Контрольные суммы файлов совпадают, резервная копия удалена."
                fi

        else
        echo "В качестве параметра должно быть указано имя файла, доступного для записи."
        fi

Grifon аватар

Сочетание "система контроля версий" - весьма полезные 3 слова ;)
http://hlabs.spb.ru/development/versions

CORPSE аватар

Да, я знаю о её существовании. Но пользоваться не приходилось, поэтому под конкретную задачу проще было написать скрипт. Да и раскидать его по моим машинам ничего не стоит, после чего всё сразу везде работает.

CORPSE аватар

Кстати, провентилировал вопрос системы контроля версий и вот что обнаружил помимо CVS:

1. Bazaar http://bazaar­vcs.org
2. Subversion http://subversion.tigris.org
3. Git http://git­scm.com

Про существование (1) и (3) вообще не знал.

Grifon аватар

Ну ты даёшь. На git ядро разрабатывается!
FА ссылочка-то такая: http://git-scm.com

Grifon аватар

Есть ещё не менее известная система mercurial. Список проектов большой:
http://ru.wikipedia.org/wiki/Mercurial

CVS сдох в прошлом веке :)
если нужно следить за конкретным файлом, то есть RCS
А если нужно за "коллекцией файлов" то есть SVN (aka Subversion) и git.

SVN максимально наследует CVS и для нее есть очень толковая документация, где все растусовано по полочкам. Если нужно решение чтобы раобтало из коробки, сразу же и с минимумом затрат на освоение, то ਂਂSVN то что нужно਼

git. --- это более функциональная и фичистая система контроля версий, но соотвественно и более сложная਼ Документация для git есть, но не такая качественная, как для SVN਼਼ Концепция, которая лежит в основе git довольно сильно отличается :) git --- это настоящий юниксвей :)

Есть правда всякая экзотика типа tla итп, но ее имеет смысл испльзовать только в случае необходимости.

ЗЫ: вроде бы не первый год никсы пользуешь :) так что даже странно, что системы контроля версий прошли стороной. Реально удобная и нужная вещь. Я не раз и не два наказывался за лень и пренебрежение ими...

Grifon аватар

Капитан Очевидность, вы?

О чем это Вы?

advokat аватар

стандартный алгоритм. ничего нового.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".