LINUX.ORG.RU
решено ФорумAdmin

Утилита rsync по разному синхронизирует каталог в зависимости от способа его указания.

 ,


0

0

Захотел я синхронизировать свою домашнею директорию в ОЗУ с директорией на локальном диске и увидел следующее:
Если написать

rsync -rRulog $HOME $SKEL;

То в директории $SKEL окажется папка $HOME/../../
tima@home-pc:~$ ls -R /synchome.d/pam_test_user
/synchome.d/pam_test_user:
home_
/synchome.d/pam_test_user/home_:
pam_test_user
/synchome.d/pam_test_user/home_/pam_test_user:
Desktop

Чтобы же отсинхронизировать именно домашнею папку надо написать
cd "$HOME";
rsync -rRulog . $SKEL;

Результат:
tima@home-pc:~$ ls -R /synchome.d/pam_test_user
/synchome.d/pam_test_user:
Desktop


В чём дело, почему каталог из которого ведётся копирование надо указывать косвенно через . , а не прямым указанием $HOME ?

★★★★★

Последнее исправление: torvn77 (всего исправлений: 1)

А cp разве по-другому работает?

- rsync -rRulog $HOME $SKEL;
+ cp -a $HOME $SKEL;
И если нет, то и rsync не должен по-другому.

gag ★★★★★
()

О, да ты ещё не пробовал слеши по-разному указывать. Документацию читать крайне полезно.

slapin ★★★★★
()
Ответ на: комментарий от gag

А cp разве по-другому работает?
...
И если нет, то и rsync не должен по-другому.


Нечто третье выходит:

cp -R $HOME $SKEL

tima@home-pc:~$ ls -R /synchome.d/pam_test_user
/synchome.d/pam_test_user:
pam_test_user
/synchome.d/pam_test_user/pam_test_user:
Desktop


Но этот результат понятен, так как cp копирует $HOME,
в то же время rsync должен синхронизировать.

П.С.Заметил что у тебя -а , сделал и так, результат тот же.

torvn77 ★★★★★
() автор топика
Последнее исправление: torvn77 (всего исправлений: 1)

Выше правильно сказали, маны читать надо

Что просил, то оно и сделало:

       -R, --relative
              Use  relative paths. This means that the full path names specified on the command line
              are sent to the server rather than just the last parts of the filenames. This is  par‐
              ticularly useful when you want to send several different directories at the same time.
              For example, if you used this command:

                 rsync -av /foo/bar/baz.c remote:/tmp/

              ... this would create a file named baz.c in /tmp/ on the remote  machine.  If  instead
              you used

                 rsync -avR /foo/bar/baz.c remote:/tmp/

              then  a file named /tmp/foo/bar/baz.c would be created on the remote machine, preserv‐
              ing its full path.  These extra path elements are called "implied  directories"  (i.e.
              the "foo" and the "foo/bar" directories in the above example).

Deleted
()
Ответ на: Выше правильно сказали, маны читать надо от Deleted

Спасибо, а я думал что на оборот, -R отключает такое поведение.

Хотя тогда возникает обратный вопрос, почему при указании точки копирования по абсолютному патчу не происходит?
. :))

(Наверно rsync добавляет точку без проверки и разрешения в путь)

torvn77 ★★★★★
() автор топика
Последнее исправление: torvn77 (всего исправлений: 3)
Ответ на: комментарий от torvn77

Потому что точка — это точка, а $(pwd) — это полный путь. Никто не обещал разрешать пути до полных, это разные вещи и так сделано специально.

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.