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

Резервное копирование с помощью bash и rsync

Есть ли способ автоматически переименовать существующий файл на приемнике? Например: если filename уже существует, он автоматически переименовывается filename к чему-то вроде filename_001, filename_002 и так далее....

Пока все, что у меня есть, это:

$ rsync -rh --progress --stats --exclude '.thumb' \
    --update --perms /origin /destination

Кстати, я знаю, что в rsync есть --ignore-existing чтобы «пропустить обновление файлов, которые существуют на приемнике», но я думаю, что мне нужно что-то вроде --rename-existing.

Если вы хотите сохранить инкрементные версии набора данных (без использования контроля версий например, предложение git что было бы другим альтернативным способом сделать это) рассмотрите возможность использования rsnap вместо того rsync.

Это позволит вам делать снимки папки или набора файлов, чтобы вы могли восстановить все, что было в любой момент времени. Вместо того, чтобы сохранять несколько копий целых файлов, он должен сохранять только различия между ними, экономя место, необходимое для хранения всех этих дубликатов.

Поскольку он использует rsync для копирования файлов за кулисами, вы можете добавить параметры rsync в конец команды. Например, в вашей ситуации, чтобы сохранить десять резервных копий, вы можете сделать что-то вроде этого:

$ rsnap 10 /origin /destination -- --progress --stats \
    --exclude '.thumb' --update --perms

Есть --backup и --suffix варианты (по крайней мере, в v3.0.8), но они не совсем выполняют то, что вы хотите, потому что --suffix фиксировано и не увеличивается автоматически (cp есть хорошая опция автоинкрементного суффикса резервной копии). Лучшее, что я мог придумать, - это использовать в качестве суффикса дату и время:

SUFFIX=`date '+%Y-%m-%d-%H:%M:%S'`
rsync -rh --progress --stats --exclude '.thumb' \
  --backup --suffix="$SUFFIX" \
  --update --perms /origin /destination

Я бы также посмотрел на использование мерзавец который является программным обеспечением для контроля версий с открытым исходным кодом. Для этого есть некоторая кривая обучения, но похоже, что это будет соответствовать тому, что вы пытаетесь сделать. Он также использует ssh, ftp и некоторые другие протоколы передачи. Хороший инструмент для зеркалирования репозиториев, отслеживания изменений и т.д. документация и очень активный канал irc (webchat.freenode.net #git), если вы застряли.

Удачи!