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

Получение rsync для перемещения файла из источника в место назначения?

Подходит ли rsync для моего проекта?

Я должен :
- копировать файлы из источника в папку назначения через SSH,
- убедитесь, что все файлы скопированы,
- удалить исходные файлы после копирования.
- если у меня есть конфликтное имя, мне нужно переименовать файлы.

Похоже, я могу использовать опцию: --remove-source-files (для удаления исходных файлов)
Но как rsync управляет конфликтами, можно ли иметь правила?

Пример использования в моем проекте:

Я запускаю научный расчет на сервере А, и результаты помещаются в папку «процесс», для каждого расчета у меня есть репозиторий, например: / process / calc1.
Теперь я хотел бы перенести репозиторий «/ calc1» на сервер B (я получаю / process / calc1) и удалить «calc1» с сервера A.
... Во время другого расчета я получаю "/ process / calc2" на сервере A, идея также состоит в том, чтобы переместить "calc2" в каталог "/ process /" на сервере B, а теперь у меня на сервере B:
- / процесс / calc1
- / процесс / calc2
(и / process / на сервере A пуст).

Как rsync будет управлять конфликтом (на сервере B), если у меня есть другая папка, например «/ process / calc1», на сервере A после нового вычисления (если «/ process / calc1» уже существует на сервере B)?

Можно ли добавить правила с помощью rsync и переименовать "/ process / calc1" на "process / calc1R2" на сервере B? И так далее (например, calc1R3)?

Спасибо.

Если вы действительно хотите использовать rsync, похоже, вам понадобится комбинация --backup, --backup-dir и --suffix. Самое близкое, что я думаю, вы могли бы получить, это что-то вроде этого

rsync -abv --suffix R1 --remove-source-files src/ dst/

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

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

Я не уверен, что это перебор для того, что вам нужно, но это должно соответствовать вашим требованиям.

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

Похоже, вы просто хотите переместить несколько файлов. Для этого не нужно использовать rsync. Похоже, вы используете Linux или BSD. Вы можете использовать mv -n поверх ssh. Параметр -n не перезаписывает существующие файлы. Это не 100% автомат. Однако я не понимаю, как этот файл мог уже существовать в вашем случае. Файлы будут скопированы из источника в место назначения, а затем удалены из источника. Вы хотите снова провести те же вычисления? Поэтому у вас останутся файлы с тем же именем? Я предлагаю добавить к имени папки номер серии или партии. В любом случае вы бы хотели, чтобы это было ясно. Есть ли у вас какой-либо контроль над названием папки? Есть еще подробности? Я бы рекомендовал поместить команды в сценарий bash или аналогичный.

Вкратце, для SSH используйте это:

Доступ через удаленную оболочку:

Вытяните: rsync [ОПЦИЯ ...] [ПОЛЬЗОВАТЕЛЬ @] HOST: SRC ... [DEST]

Нажмите: rsync [OPTION ...] SRC ... [USER @] HOST: DEST

Все это объясняется в rsync (1).

Что касается написания сценария для cronjob, чтобы автоматически выполнить rsync через ssh, не требуя пароля, посмотрите также ssh-agent (1).