我想复制自/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 作为写分支。然后问题就减少到仅将 B+C 上丢失的文件从 A 复制到 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