Як отримати rsync для переміщення файлу з джерела до місця призначення?


15

Чи rsync є гарним вибором для мого проекту?

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

Схоже, я можу використовувати варіант: --remove-source-файли (для видалення вихідних файлів)
Але як rsync управляє конфліктом, чи можу я мати правила?

Використовуйте корпус для мого проекту:

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

Як rsync буде управляти конфліктом (на сервері B), якщо у мене на сервері A після нового обчислення є інша папка типу "/ process / calc1" (якщо "/ 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.
guettli

Ой ... Так, це робить зрозумілішим.
d -_- b

-1

Для SSH, підсумовуючи це, використовуйте це:

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

Потягніть: rsync [ВАРІАНТ ...] [КОРИСТУВАЧ @] ХОСТА: SRC ... [DEST]

Натисніть: rsync [ВАРІАНТ ...] SRC ... [USER @] HOST: DEST

Все це пояснено у rsync (1).

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.