rsync --link-dest は期待どおりシンボリックリンクを使用しません。

rsync --link-dest は期待どおりシンボリックリンクを使用しません。

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

次のコードは通常シンボリックリンクへのハードリンクを生成し、lnmacOSのマニュアルにも文書化されています(編集:いいえ、そうではありません。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)によって、新しい名前が生成されなかったことがわかります(有効な場合は両方ともslink2になります)。また、これは1つのinodeリンク(2つではない)があるシンボリックリンクであることを知らせます。slinkhlinkstathlink

$ 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")

おすすめ記事