これはrsync
で行う必要はありませんが、これを行うためのスクリプトを記述する必要はなく、rsync
は私が望むものに非常に近いです。
rsync -a
(または-l
)はシンボリックリンクを保持でき、-L
は、シンボリックリンクを逆参照して、通常のファイル/ディレクトリであるかのようにコピーできます。しかし、シンボリックリンクを保持し、リンクが指すファイル/ディレクトリをコピーすることは可能ですか?
ここに例があります。次のフォルダ階層があるとします。
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others
そして私がするときrsync -aR dirA dest
(または何か他のもの)、これらをdest
に正確に表示させたい:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2
これはrsync
で可能ですか?ありがとうございました。
絶対パスを持つ、またはソースディレクトリの外部を指すシンボリックリンクは無視できると仮定します。
シンボリックリンク名がわかっていて、linkおよびtargetを転送する場合は、次のことができます。
rsync -a 'symlink' .
realdir="$(basename "$(readlink -f 'symlink')")"
rsync -a "$realdir" .
最初のrsync
はsymlink
のみを転送します。 2番目のコマンドは実際のディレクトリ名を検索し、2番目のrsync
はディレクトリの内容を転送します。
これは、これらすべてが「mydir」内にあり、「mydir」をある場所から別の場所にrsyncする場合にのみ可能です。 Rsyncは、指定したパスの外にコピーすることはできません(以下のリンクを除く)。例えば
mydir/dirA ...
mydir/dirB ...
...