rsyncでシンボリックリンクをリンクとしてコピーするか、その先までたどってコピーするかの違い。
辿って欲しいときと欲しくない時がある。
3つのオプション
man rsyncすると
-L, --copy-links transform symlink into referent file/dir
--copy-unsafe-links only "unsafe" symlinks are transformed
--safe-links ignore symlinks that point outside the tree
と3つ出る。
日本語にすると
--copy-links | シンボリックリンクのファイル・ディレクトリを辿ってコピーする |
--copy-unsafe-links | "unsafe"なシンボリックリンクだけコピーする |
--safe-links | Tree外のシンボリックリンクは辿らない |
こんな感じかな?
とりあえずやってみる
こんな構成のディレクトリをコピーする。treeコマンドによる一覧はこれ。
$ tree . . |-- bar |-- foo | `-- baz -> /tmp |-- hoge | `-- uki | |-- a | |-- b | |-- c | `-- d `-- wat -> hoge/uki ./foo/bazが操作するより上の階層/tmpにリンクしてて、./watは操作内の階層./hoge/ukiにリンクしてる 5 directories, 5 files
アーカイブモードのデフォルト
$ rsync -e ssh -avzn ./* httpmanual@10.200.51.1:~/work/20120629/
building file list ... done
bar
wat -> hoge/uki
foo/
foo/baz -> /tmp
hoge/
hoge/uki/
hoge/uki/a
hoge/uki/b
hoge/uki/c
hoge/uki/dsent 287 bytes received 80 bytes 734.00 bytes/sec
total size is 12 speedup is 0.03
デフォルトはシンボリックリンクをリンクとしてコピーする。転送先で/tmpとかが無かった場合、無効なリンクになるがリンクは作成される。
--safe-links (自分の配下外へのリンクがあるとそれはコピーしない)
$ rsync -e ssh -avzn --safe-links ./* remote-user@remote.host.example.com:~/work/20120629/
building file list ... done
bar
wat -> hoge/uki
foo/
ignoring unsafe symlink "/home/remote-user/work/20120629/foo/baz" -> "/tmp"
hoge/
hoge/uki/
hoge/uki/a
hoge/uki/b
hoge/uki/c
hoge/uki/dsent 281 bytes received 74 bytes 710.00 bytes/sec
total size is 12 speedup is 0.03
--copy-links (全部辿ってファイルをコピーしてくれる)
$ rsync -e ssh -avzn --copy-links ./* remote-user@remote.host.example.com:~/work/20120629/
building file list ... done
bar
foo/
foo/baz/
foo/baz/mapping-root
foo/baz/scim-panel-socket:0-root
foo/baz/x8af17ba1c705910a1fdaa2cd7aa83f7
foo/baz/.ICE-unix/
foo/baz/.font-unix/
foo/baz/.font-unix/fs7100
hoge/
hoge/uki/
hoge/uki/a
hoge/uki/b
hoge/uki/c
hoge/uki/d
wat/
wat/a
wat/b
wat/c
wat/dsent 780 bytes received 152 bytes 1864.00 bytes/sec
total size is 2172 speedup is 2.33
--copy-unsafe-links (「自分の配下から外れてるもののみ」をコピー)
$ rsync -e ssh -avzn --copy-unsafe-links ./* remote-user@remote.host.example.com:~/work/20120629/
building file list ... done
bar
wat -> hoge/uki
foo/
foo/baz/
foo/baz/mapping-root
foo/baz/scim-panel-socket:0-root
foo/baz/x8af17ba1c705910a1fdaa2cd7aa83f7
foo/baz/.ICE-unix/
foo/baz/.font-unix/
foo/baz/.font-unix/fs7100
hoge/
hoge/uki/
hoge/uki/a
hoge/uki/b
hoge/uki/c
hoge/uki/dsent 723 bytes received 128 bytes 1702.00 bytes/sec
total size is 2180 speedup is 2.56
自分の中身を参照しているようなリンクはコピーしないで、むしろその逆の「自分の配下から外れてるもの*のみ*」をコピーしてくれる。