Linux
rsync 僅在未修改時將接收器上的符號連結目錄視為目錄,否則它將複製該目錄
如果文件之間沒有差異,我想保留軟連結,如果有差異,我想複製目錄。我在用
rsync -rk src dis
在 src 我有目錄:
dir1
有file1
andfile2
,並且在dis
I havedir1->/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
,但這裡不相關。)