2015-07-07 3 views
12

Я пытаюсь сделать что-то по той же схеме, как то, что спрашивается в этом вопросе: RSync: How do I synchronize in both directions?Slashes и команда Rsync

Однако то, что я не могу понять, должен ли я добавить косую черту в конец пути к файлу. В основном я пытаюсь создать команду alias, которая синхронизирует содержимое двух каталогов, которые идут с тем же именем, но находятся на двух разных серверах. Я не хочу, чтобы один каталог был скопирован в другой (что я знаю, это возможность в зависимости от того, как выполняются слэши в конце).

То, что я в настоящее время:

alias syncDirectories1 = 'rsync -tvur [email protected]:/Users/me/directory/ /Users/me/directory/' 
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ [email protected]:/Users/me/directory/' 

За то, что я пытаюсь сделать, должен ли быть косые в конце обоих файлов путей?

Заранее благодарю за помощь.

ответ

17

Это описано в справочной странице rsync(1).

Конечная косая черта на источнике изменяет это поведение, чтобы избежать создания дополнительного уровня каталога в пункте назначения. Вы можете придумать трейлинг/источник, что означает «скопировать содержимое этой директории» в отличие от «скопировать каталог по имени», но в обоих случаях атрибуты содержащего каталога переносятся в содержащийся каталог назначение. Другими словами, каждый из Последующие Инг команды копирует файлы таким же образом, в том числе их установки атрибутов/Dest/Foo:

rsync -av /src/foo /dest 
rsync -av /src/foo/ /dest/foo 

Как к месту назначения, я не думаю, что это имеет серьезные последствия. Существует разница, если источником является файл и назначения не существует - команда

rsync SRC DEST 

сделает копию SRC под названием DEST, в то время как

rsync SRC DEST/ 

создаст каталог DEST и скопировать SRC файл в него.

+1

В 'будет эффективно переименовывать SRC в DEST, тогда как', я думаю, что это не 'переименовать', а это' cp'? –

+0

@SanghyunLee, правильно, хорошо поймать! – werkritter

3

держите слэш на источнике и удалите их из пункта назначения. Как это:

alias syncDirectories1 = 'rsync -tvur [email protected]:/Users/me/directory/ /Users/me/directory' 
alias syncDirectories2 = 'rsync -tvur /Users/me/directory/ [email protected]:/Users/me/directory' 
0

я имел разные результаты принятого ответа на Ubuntu 17.04, то кажется, что назначение/не имеет эффекта. я сделал следующие четыре команды:

  • Rsync -av SRC nslash ------------ не косые на любом SRC или Dest
  • Rsync -av SRC dslash/--- --------- Slash on Dest only
  • rsync -av src/sslash ------------ Slash on src only
  • rsync -av src/sdslash/---------- Slash на обоих ЦСИ и Dest

Выводы:

  • после того, как есть/на src, тогда содержимое только для src будет скопировано в dest, независимо от того, имеет ли dest сбой или нет.
  • без косой черты в src, затем src и его содержимое будут скопированы в dest.
  • Слэши на десте не действуют.
Смежные вопросы