Как вы показали, system / nrcalc
- это символическая ссылка в локальной системе, но это каталог на удаленном сервере. Если каталог в удаленной системе не пуст, rsync откажется удалить его (чтобы освободить место для символической ссылки), если вы не укажете - force
или одно из - delete
параметры. Если вы не хотите заменять каталог на дальнем конце, но вам все равно нужно обновить его содержимым, указанным в локальной символической ссылке, вы можете использовать - copy-dirlinks
.
Rsync жалуется на это даже с указанием - dry-run
, чтобы предупредить вас о том, что ему потребуется удалить каталог на дальнем конце, чтобы выполнить то, что вы его просите. Использование любой из упомянутых мной опций в сочетании с -n
даст вам чистый пробный запуск без фактического удаления чего-либо.
Что касается других опций, которые вы пробовали:
Параметр -K
( - keep-dirlinks
) эквивалентен - copy-dirlinks
, за исключением стороны назначения. Ваша символическая ссылка находится на стороне источника, поэтому эта опция не повлияла на вас.
Параметр -l
( - links
) гарантирует, что символические ссылки копируются как символические ссылки, но опять же без - force
или - -delete
, rsync откажется заменять непустой каталог символической ссылкой. Кроме того, -a
подразумевает -l
, так что вы все равно использовали его все время.
Да, файл будет автоматически закрыт при завершении процесса, независимо от причины завершения процесса.
Это задокументировано в POSIX . В «Последствия завершения процесса », среди прочих последствий:
- All of the file descriptors, directory streams, conversion descriptors, and message catalog descriptors open in the calling process shall be closed.
И в «Завершение процесса »:
It is important that the consequences of process termination as described occur regardless of whether the process called _exit() (perhaps indirectly through exit()) or instead was terminated due to a signal or for some other reason.