rsync –link-dest не работает, как ожидалось, с символическими ссылками

Я использую rsync для резервного копирования некоторых моих файлов:

rsync -aEN --delete --link-dest="$CURR/" "$SOURCE/" "$NEW/"

Параметр --link-dest отлично работает с большинством файлов, но не с символическими ссылками.
Когда я писал сценарий очистки старых резервных копий, я заметил, что неизмененные символические ссылки не являются жестко связанными, а скорее скопированными.

Теперь мне интересно:
Есть ли способ сделать жесткие ссылки rsync неизменными символами?
А если нет: это намеренно или ошибка в rsync?

Я использую rsync версии 3.1.1 в Mac OS 10.11.

Редактировать:

Кажется, это проблема в Mac OS X. По какой-то причине HFS +, похоже, не поддерживает жесткие ссылки на символические ссылки.

2 Solutions collect form web for “rsync –link-dest не работает, как ожидалось, с символическими ссылками”

Файловая система Mac OS X (HFS +) не поддерживает жесткие ссылки на символические ссылки:

 $ touch file $ ls -l file -rw-r--r-- 1 kk staff 0 Jun 17 18:35 file $ ln -s file slink $ ls -l file slink -rw-r--r-- 1 kk staff 0 Jun 17 18:35 file lrwxr-xr-x 1 kk staff 4 Jun 17 18:36 slink -> file 

Следующее обычно создавало бы жесткую ссылку на символическую ссылку и даже документировано в руководстве ln по OS X, чтобы сделать это (EDIT: нет, это не так, если у вас нет GNU coreutils):

 $ ln -P slink hlink $ ls -l file slink hlink -rw-r--r-- 1 kk staff 0 Jun 17 18:35 file lrwxr-xr-x 1 kk staff 4 Jun 17 18:38 hlink -> file lrwxr-xr-x 1 kk staff 4 Jun 17 18:36 slink -> file 

Вы можете увидеть по номеру ref (1), что новое имя не было создано для slink (было бы 2 для обоих slink и hlink если бы оно сработало). Кроме того, stat сообщает нам, что hlink является символической ссылкой с 1 ссылкой inode (не 2):

 $ stat hlink File: 'hlink' -> 'file' Size: 4 Blocks: 8 IO Block: 4096 symbolic link Device: 1000004h/16777220d Inode: 83828644 Links: 1 Access: (0755/lrwxr-xr-x) Uid: ( 501/ kk) Gid: ( 20/ staff) Access: 2016-06-17 18:38:18.000000000 +0200 Modify: 2016-06-17 18:38:18.000000000 +0200 Change: 2016-06-17 18:38:18.000000000 +0200 Birth: 2016-06-17 18:38:18.000000000 +0200 

EDIT: Поскольку я был пойман с использованием GNU coreutils, вот тесты снова с /bin/ln на OS X:

 $ touch file $ /bin/ln -s file slink $ /bin/ln slink hlink # there is no option corresponding to GNU's -P $ ls -l file slink hlink -rw-r--r-- 2 kk staff 0 Jun 17 18:59 file -rw-r--r-- 2 kk staff 0 Jun 17 18:59 hlink lrwxr-xr-x 1 kk staff 4 Jun 17 18:59 slink -> file 

Жесткая ссылка указывает на file а не на slink .

Например, Linux и OpenBSD (другие операционные системы, которые я использую), это можно сделать, что приводит к

 $ ls -l file slink hlink -rw-rw-r-- 1 kk kk 0 Jun 17 18:35 file lrwxrwxrwx 2 kk kk 4 Jun 17 18:43 hlink -> file lrwxrwxrwx 2 kk kk 4 Jun 17 18:43 slink -> file 

(уведомление «2»)

Вы не можете делать жесткие ссылки на символические ссылки (это не «ограничение» OS X). Жесткая ссылка – это ссылка на индексный дескриптор, а символьная ссылка не является inode, а только записью в каталоге с некоторой дополнительной информацией.

Вы можете думать о Windows, которая имеет аналогичные функции, которые ведут себя по-разному.

rsync есть --copy-links которая сообщает ему скопировать файл, на который указывает символическая ссылка на пункт назначения. Это было бы полезно, если вы пытаетесь построить полную копию своего исходного каталога (но не очень полезно, если ваша цель – сократить использование диска).

  • В чем разница между символическими и жесткими ссылками?
  • Symlinks vs Hardlinks и способы их создания
  • Жесткие ссылки и переходы (Windows)
  • rsync – более быстрая, гибкая замена для rcp
  • link, ln – сделать ссылки
  • Почему жесткие ссылки на каталоги не разрешены в UNIX / Linux?
  • Может видеть файл в / usr / local / bin с ls, но попытка его запуска дает файл не найден?
  • Найти все файлы / файлы, на которых есть ссылки на них?
  • Ссылка 2 существующих файла
  • Могу ли я сделать символическую ссылку на разные местоположения на разных машинах?
  • Установка Debian, установка / var / tmp / home в том же разделе
  • Предоставление / bin и / lib внутри chroot тюрьмы
  • Symlink для очистки домашнего каталога
  • ls .. не работает должным образом с символическими ссылками
  • Символическая ссылка становится нечитаемой после prctl (PR_SET_DUMPABLE, 0);
  • Захват имени файла, указанного символической ссылкой в ​​переменной
  • Linux и Unix - лучшая ОС в мире.