Есть ли способ автоматически переименовать существующий файл на приемнике? Например: если 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), если вы застряли.
Удачи!