如果我有 2 个目录,a 和 b,有人能建议一种方便的方法来创建一个似乎同时包含 a 和 b 内容的目录而无需复制文件吗?目前,我一直在使用 ln -s * 来加载符号链接,然后在完成后删除符号链接。不过,如果子目录的内容似乎合并了,我会更喜欢它,而使用符号链接方法管理它可能需要一些调整。
如果结果目录对于应用程序来说是只读的,那就没问题。
答案1
您可以使用以下方法有效地合并目录联合金融服务通过将两个目录(在此上下文中称为分支)叠加为一个挂载点。
UnionFS 有几种实现;联合FsFuse是比较简单的一个,因为它是一个应用程序(而不是内核补丁)。
该网站包含其档案的链接。在大多数发行版中,编译源代码应该很简单。
例如,在 Ubuntu 中,安装包即可unionfs-fuse通过执行以下命令:
sudo apt-get install unionfs-fuse
安装完成后,您可以继续覆盖目录。有多种选项。我将简要解释最基本的选项:
命令
unionfs-fuse foo:bar baz
覆盖目录的内容富和酒吧在目录中巴兹。1
此覆盖将是只读的;任何试图创建或修改巴兹将导致没有权限。错误。但是,您仍然可以创建和修改其中的文件富和酒吧他们自己。
冲突以固定的方式处理:如果文件存在于更高的分支中(富),它将优先于较低分支中的同名文件(酒吧)。
命令
union-fuse foo=RW:bar=RO baz
使富可写且酒吧(只读)。修改文件富是可能的,但修改文件酒吧不会。所有新创建的文件巴兹将出现在富。
命令
union-fuse -ocow foo=RW:bar=RO baz
与上一个命令类似。写时复制选项(
cow
)的效果是,尝试修改文件酒吧里面巴兹将导致文件的修改副本富(或任何其他更高级别的可写分支)。使用命令
union-fuse foo=RW:bar=RW baz
所有内容均可修改。新文件将在顶部分支中创建 (富)。
命令
union-fuse foo=RO:bar=RW baz
允许修改文件酒吧里面巴兹,但无法创建新文件。
命令
sudo umount baz
解除联合坐骑。
也可以看看:男子 unionfs-fuse
1 巴兹执行此命令之前必须存在。这也适用于所有后续命令。