これはで行う必要はありませんが、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
ですか?ありがとうございました。
絶対パスを持つ、またはソースディレクトリの外部を指すシンボリックリンクは無視できると仮定します。
良いキャッチ。私の使用例では、ツリーの外部へのリンクポイントはなく、リンクに絶対パスはありません。
—
Wei-Yin
私はそれについて考えれば考えるほど、標準的なユーティリティではこれを実行できないと思います。一般的なケースでは、それはあなたがそのターゲット(シンボリックリンクが含まれているシンボリックリンクへのシンボリックリンクまたはより一般的にシンボリックリンクを持っている場合は、単一のソース与えられた目的地を大量に作成する必要があります例えば
—
Gilles「SO-邪悪なことをやめなさい」
a -> b
、b -> c/foo
、c -> d/e
:コピーへの要求a
もコピーする必要がありますb
、c
、c/foo
、d
、d/e
およびd/e/foo
)。
@ギレス:はい、あなたは正しいです。リンクを追跡すると、まだソースディレクトリ内にある限り、多くのファイルが含まれる可能性があります。
—
魏殷
dirA/link
へのシンボリックリンクである../dirB/file
場合、これはコピーとして扱われるべきdirB/file
までdest/dirB/file
とdirA/link
しますdest/dirA/link
。dirA/link
へのリンクはどうなり../../another_file
ますか?一般dirA/link
に、ディレクトリツリーの上位にあるディレクトリを指している場合はどうなりますか?