2台のコンピュータ間で大規模なフォルダ階層を同期させたい。シンボリックリンクの内容をコピーしたい(絶対的な場合)。たとえば、/some/folder/someFile
シンボリックリンクの内容を維持したい(相対的な場合)。たとえば、../../somefolder
これを行うには?
編集する: 基本的に私は再帰を避けようとします。絶対リンクをコピーしますが、リンクを保持せずに内部リンクまたは相対リンクをスキップする --copy-unsafe-links オプションを試しました。
答え1
--copy-unsafe-links
rsyncのオプションを使用して、シンボリックリンクが同期されたフォルダスペースの外側を指すファイルデータをコピーできるはずですが、指定されたファイルも同期されたときにのみシンボリックリンクを送信できると思います。これは--links
(に含まれる)-l
に追加され、コピーされ-a
た階層内の相対シンボリックリンクをシンボリックリンクにコピーするために使用されます。
十分に詳細でない場合は、送信したくないリンクリストを作成し、それらをインクルードfind
/除外リスト形式の入力に渡す必要があるかもしれません。rsync
答え2
このrsyncコマンドを使用してください。
rsync -vrtil --copy-unsafe-links --log-file=(logfile) (source_dir) (dest_dir)
到着する:
ローカルシステムに関連するシンボリックリンクを維持する
絶対リンク(たとえば、「/」で始まる)の場合、シンボリックリンク(「参照オブジェクト」など)が指すファイル/ディレクトリがターゲットにコピーされます。
#1の例:この例では、ソース側に2つのファイル、つまりシンボリックリンクとリンクされたファイル(例:「参照オブジェクト」、つまりdocs_home.htm)があります。
(prompt): ls -al docs*
-rwxr-sr-x 1 (owner) (group) 8853 Jul 31 2019 docs_home.htm
lrwxrwxrwx 1 (owner) (group) 13 May 31 2019 docs_home.html -> docs_home.htm
ターゲット(つまり、ターゲット)側で上記のrsyncコマンドを実行すると、次のようになります。
(prompt): ls -al docs*
-rwxr-sr-x 1 (owner) (group) 8853 Jul 31 2019 docs_home.htm
lrwxrwxrwx 1 (owner) (group) 13 May 31 2019 docs_home.html -> docs_home.htm
#2の例:ソース側には次のリンクがあります。
lrwxrwxrwx 1 (owner) (group) 59 Sep 14 2011 Document13.pdf -> /projects/proj_name/proj_subdir/Document13.pdf
ターゲット(「ターゲット」)側で上記のrsyncコマンドを実行した後、「ls -al」の実行結果の次の部分に示すように、ファイル自体がコピーされました。
-rwxrwxr-x 1 (owner) (group) 45874 Sep 14 2011 Document13.pdf