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


15

Является ли rsync хорошим выбором для моего проекта?

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

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

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

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

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

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

Благодарю.

Ответы:


11

Если вы действительно хотите использовать 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 (в случае проблем с сетью).
user44782

1

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

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


В некоторых случаях мне нужно снова выполнить тот же расчет (и поэтому я получаю файлы с тем же именем). Вы правы, добавление прогона - хорошая идея: найдите также команду mmv -a (надеюсь, она работает в режиме ssh, кто-нибудь уже использовал эту командную строку?). У меня есть контроль над тем, как папка названа.
user44782

Скорее всего, он не установлен на машине. Если это ваша машина, вы можете установить ее. На основе Debian: sudo apt-get install mmv Вы также можете изучить sshfs или NFS и получить файлы, выводимые непосредственно в конечный пункт назначения. Если нет необходимости в промежуточном местоположении (осмотр, модификация и т. Д.). Если связь между двумя машинами ненадежна, это, конечно, плохая идея. Предложение Павла хорошо. Хотя добавление номера прогона с самого начала, вероятно, было бы более организованным.
d -_- b

1
Как вы используете "mv -n" поверх ssh? Вы можете использовать mv поверх sshfs.
Геттли

Опс ... Да, это проясняет.
d -_- b

-1

В общем, для SSH используйте это:

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

Потяните: rsync [ВАРИАНТ ...] [ПОЛЬЗОВАТЕЛЬ @] ВЕДУЩИЙ: SRC ... [DEST]

Нажмите: rsync [ОПЦИЯ ...] SRC ... [ПОЛЬЗОВАТЕЛЬ @] ВЕДУЩИЙ: DEST

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.