rsync
내 파일 중 일부를 백업하는 데 사용하는 것 :
rsync -aEN --delete --link-dest="$CURR/" "$SOURCE/" "$NEW/"
이 --link-dest
옵션은 대부분의 파일에 작동하지만 심볼릭 링크에는 작동하지 않습니다.
이전 백업에 대한 정리 스크립트를 작성할 때 변경되지 않은 심볼릭 링크가 하드 링크가 아니라 복사된 것임을 확인했습니다.
이제 궁금합니다. 하드 링크를 불변 심볼릭 링크로
만드는 방법이 있나요 ? 그렇지 않은 경우: 이것은 의도적인 것입니까, 아니면 rsync의 버그입니까?rsync
저는 Mac OS 10.11에서 rsync 버전 3.1.1을 사용하고 있습니다.
편집하다:
이는 Mac OS X에서 발생하는 문제인 것 같습니다. 어떤 이유로 HFS+는 심볼릭 링크에 대한 하드 링크를 지원하지 않는 것 같습니다.
답변1
macOS(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
macOS 매뉴얼에도 문서화되어 있습니다(편집: 아니요, 그렇지 않습니다. 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
참조 횟수(1)에 따라 새 이름이 생성되지 않았음을 알 수 있습니다( 유효한 경우 둘 다 slink
2가 됨 ). 또한 이것은 1개의 inode 링크(2개가 아님)가 있는 심볼릭 링크임을 알려줍니다.slink
hlink
stat
hlink
$ 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
/bin/ln
편집: GNU coreutils를 사용하다가 적발되었기 때문에 macOS에서 다시 테스트해 보겠습니다.
$ 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")
답변2
심볼릭 링크에 대한 하드 링크를 만들 수 없습니다(이것은 OS X "제한 사항"이 아닙니다). 하드 링크는 inode에 대한 참조이고, 심볼릭 링크는 inode가 아니라 일부 추가 정보가 있는 디렉토리의 항목일 뿐입니다.
비슷한 기능을 가지고 있지만 다르게 동작하는 Windows를 생각할 수도 있습니다.
rsync
하다--copy-links
대상 파일을 가리키는 심볼릭 링크를 복사하라는 옵션이 있습니다 . 이는 소스 디렉터리의 전체 복사본을 만들려고 할 때 유용합니다(그러나 디스크 사용량을 줄이는 것이 목표라면 별로 유용하지 않습니다).