Rsyncは完全なシンボリックリンクディレクトリ構造を維持します。

Rsyncは完全なシンボリックリンクディレクトリ構造を維持します。

したがって、ファイルを転送するときに同期リンク構造を維持したいので、フォルダ構造は次のようになります。

$HOME/backup/backup/symlinks
    - $HOME/Documents/hello.txt
$HOME/backup/backup/data

これで、同期時にシンボリックリンクの完全なフォルダ構造を維持したいと思います。

今すること:

$HOME/backup/backup/symlinks
    - $HOME/Documents/hello.txt
$HOME/backup/backup/data
    - hello.txt

私はそれをしたいですか?

$HOME/backup/backup/symlinks
    - $HOME/Documents/hello.txt
$HOME/backup/backup/data
    - /home/user/Documents/hello.txt (aka, create the full structure inside the backup/data folder)

したがって、データフォルダ内にソースシンボリックリンクコンテンツソースへのフルパスを作成したいと思います。

私は以下を試しました:

rsync -a ${BACKUP}/backup/symlinks/ /${BACKUP}/backup/data/
rsync -aK ${BACKUP}/backup/symlinks/ /${BACKUP}/backup/data/
rsync -aKL ${BACKUP}/backup/symlinks/ /${BACKUP}/backup/data/

rsyncはこれを行うことができますか?では、どうすればこれを達成できますか?

答え1

まず、リンクを解析してから、個々のファイルに対してrsyncを実行する必要があると思います。これにより-R.IEが渡されます。 Linuxで次のことを試してください。

rsync -avRL --files-from=<(find ${BACKUP}/backup/symlinks/ -exec readlink -f {} \;) / /${BACKUP}/backup/data/

Mac OSでは、次のようになります。

rsync -avRL --files-from=<(find ${BACKUP}/backup/symlinks/ -exec readlink {} \;) / /${BACKUP}/backup/data/

findコマンドが正しい絶対パスを出力すると仮定します。それは${BACKUP}絶対的なディレクトリです。

関連情報