我想複製自/A到/C僅缺少路徑/B和/C。 (請假設這些是路徑,並且也可以代表遠端位置,例如透過安裝sshfs
)
我想知道...有沒有比編寫循環、迭代文件系統並逐一檢查更簡潔的方法?
樹目錄的範例內容/A,/B,/C:
/A:
/A/1abc/qwe
/A/2abc/asd
/A/3abc/zxc
/A/4abc/rty
/B:
/A/2abc/asd
/A/3abc/zxc
/C:
/C/1abc/qwe
預期:複製自/A到/C唯一路徑4abc/rty
:
/A/4abc/rty -> /C/4abc/rty
以實際例子來說明/A,/B,/C,導致這樣的場景:
- 你進行備份,從某些地方複製/來源(/A)對某些/目的地(/B)並且有些路徑複製失敗。所以無論如何你都想擁有遺失的副本。所以你發現/另一個目的地(/C)可以接受它們,並且您只想複製缺失的。以下是為什麼複製的範例限制/A到/B可能失敗:光碟已滿;檔案系統的限制/B(如檔案名稱長度),雖然不存在/C檔案系統; ETC。
答案1
一種解決方案是製作一個聯合安裝B 和 C,其中 C 作為寫分支。然後問題就減少到從 A 複製到 B+C,僅將 B+C 上遺失的檔案複製到 B+C,這可以透過
rsync -a --ignore-existing /A /B+C
對於聯合安裝,一種可能性是UnionFS熔斷器。
unionfs-fuse -o cow /C=RW:/B=RO /B+C
或者unionfs:
mount -t unionfs -o dirs=/C=rw:/B=ro unionfs /B+C