rsync はシンクのシンボリックリンクディレクトリが変更されていない場合にのみディレクトリとして扱います。それ以外の場合はディレクトリをコピーします。

rsync はシンクのシンボリックリンクディレクトリが変更されていない場合にのみディレクトリとして扱います。それ以外の場合はディレクトリをコピーします。

ファイル間に違いがなければソフトリンクを維持し、違いがあればディレクトリをコピーしたいと思います。使っています

rsync -rk src dis

srcにはディレクトリがあります。dir1そこfile1に(ソフトリンク)file2disあります。実行時のみコピーされます。ファイルをコピーしたくありません。ソフトリンクを削除してコピーしたいです。dir1->/home/dir1/home/dir1/file1rsync -rk src disfile2/home/dir1//home/dir1/src/dir1/

ベストアンサー1

1回の通話ではこれは可能ではないと思いますrsyncrsyncファイルが変更されたかどうかをテストしてこの問題を解決し、変更された場合はコピーを実行します。

はい

# Setup
mkdir /tmp/710162
cd /tmp/710162

mkdir -p src/dir1 dis home/dir1
date >src/dir1/file1
cp -p src/dir1/file1 home/dir1
ln -s /tmp/710162/home/dir1 dis/dir1

パスワード

if rsync --dry-run --keep-dirlinks -ai src/ dis | grep -q '^[^.]'
then
    echo "Changes found"
    rsync -ai src/ dis
fi

インストール後すぐに実行した結果:なし(つまり、シンボリックリンクは同じままでファイルは変更されません)

who >src/dir1/file2

新しいファイルを追加した後の結果:

Changes found
.d..t...... ./
cd+++++++++ dir1/
>f+++++++++ dir1/file1
>f+++++++++ dir1/file2

この時点でシンボリックリンクが削除され、ソースファイルのコピーが新しく作成されたdir1ディレクトリに配置されます。

(条件をテストするために使用されるテストとレプリケーションを実行するために使用されるテストの間に競合条件がある可能性がありますが、rsyncここでは関係ありません。)

おすすめ記事