Відповіді:
Якщо у вас є більше, ніж створений останній каталог аркушів, ви можете запустити окремий ssh ... mkdir -p
спочатку або скористатися --rsync-path
трюком, як пояснено тут :
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
Або скористайтеся --relative
опцією, запропонованою Тоні. У цьому випадку ви вказуєте лише корінь пункту призначення, який повинен існувати, а не структуру каталогів джерела, яке буде створено:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
Таким чином, ви закінчите / pre_existing / dir / new / x / y / z /
І якщо ви хочете створити "y / z /", але не всередині "new / x /", ви можете додати ./
там, де ви хочете --relative
почати:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
створив би / pre_existing / dir / y / z /.
&&
?
Якщо припустити, що ви використовуєте ssh для підключення rsync, що робити з тим, щоб надіслати команду ssh раніше:
ssh user@server mkdir -p existingdir/newdir
якщо вона вже існує, нічого не відбувається
rsync
відповідною відсутністю відповіді.
ssh
він не підтримується та rsync
підключається до rsync daemon
віддаленого кінця.
-R, --relative
Варіант робитиме це.
Наприклад: якщо ви хочете створити резервну копію /var/named/chroot
та створити ту саму структуру каталогів на віддаленому сервері, то -R
зробите саме це.
/./
у вихідному контурі. Детальну інформацію див. На сторінці чоловіка.
rsync
не створюватиме каталоги автоматично, якщо цільових папок не існує. Зітхнути.
--relative
. Це може не робити те, що ви думаєте.
--relative
у поєднанні з /./
тим, що шукатиме більшість новачків. rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
скопіює вміст робочого столу на цільовий робочий стіл. Не знаю, як різниці в іменах користувачів можуть вплинути на це.
це працювало для мене:
rsync /dev/null node:existing-dir/new-dir/
Я отримую це повідомлення:
skipping non-regular file "null"
але мені не доведеться турбуватися про те, щоб навколо був порожній каталог.
Я не думаю, що ви можете це зробити за допомогою однієї команди rsync, але ви можете спочатку створити додатковий каталог, як це:
rsync --recursive emptydir/ destination/newdir
де 'emptydir' - це локальний порожній каталог (який, можливо, потрібно створити спочатку як тимчасовий каталог).
Це трохи хак, але це працює для мене.
ура
Кріс
rsync /dev/null node:existing-dir/new-dir/
пропозицію вище.
Ця відповідь використовує біти інших відповідей, але, сподіваємось, буде трохи зрозуміліше щодо обставин. Ви ніколи не вказували, що ви rsyncing - один запис каталогу або кілька файлів.
Тож припустимо, що ви переміщуєте запис вихідного каталогу впоперек, а не просто переміщуєте файли, що містяться в ньому.
Скажімо, у вас є локальний каталог, під яким data/myappdata/
ви завантажуєте підкаталоги. У вас є data/
цільова машина, але ні data/myappdata/
- це досить просто:
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
Можна навіть використовувати інше ім’я для віддаленого каталогу:
rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname
Якщо ви просто переміщуєте деякі файли, а не переміщуєте запис каталогу, який містить їх, то зробите:
rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/
і він створить вам myappdata
каталог на віддаленій машині для розміщення ваших файлів. Знову ж цей data/
каталог повинен існувати на віддаленій машині.
До речі, моє використання -rvv
прапора полягає в тому, щоб отримати подвійний багатослівний вихід, щоб було зрозуміло, що він робить, а також необхідну рекурсивну поведінку.
Просто щоб показати вам, що я отримую при використанні rsync (3.0.9 в Ubuntu 12.04)
$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine's password:
sending incremental file list
created directory /tmp/newdir
delta-transmission enabled
bar.txt
foo.txt
total: matches=0 hash_hits=0 false_alarms=0 data=0
Сподіваюсь, це трохи прояснить це.
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
але те, що було створено для цілі, є / віддалений / шлях / до / даних / myappdata / myappdata /
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
mkdir
, тому я використовую хак:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
він створює додатковий файл, але його можна видалити пізніше.