Linux

rsync 僅在未修改時將接收器上的符號連結目錄視為目錄,否則它將複製該目錄

  • July 17, 2022

如果文件之間沒有差異,我想保留軟連結,如果有差異,我想複製目錄。我在用

rsync -rk src dis

在 src 我有目錄:dir1file1and file2,並且在disI have dir1->/home/dir1(soft link) 中/home/dir1/只有file1 當我執行rsync -rk src dis,file2被複製到/home/dir1/ 我不想將文件複製到/home/dir1/我想刪除軟連結並複制src/dir1/

我認為這不可能通過單次呼叫rsync. 我會通過使用rsync來測試是否有任何文件已更改,如果是,則執行複制。

例子

# 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,但這裡不相關。)

引用自:https://unix.stackexchange.com/questions/710162