问题描述
我有一个无法修改的源代码控制系统,该系统分散了很多文件到不幸的地方。我的IDE希望这些文件夹位于一个统一的位置。通常,我只是将所有内容符号链接在一起,但为了使情况更糟,必须递归合并某些文件夹。我保证没有重叠的文件名,但是我们谈论的是成千上万个文件,这比我要手工完成的更多。
我已经研究了unionfs和aufs,但这是一台公司机器,因此不必担心内核(更不用说这些wang chung的”getting started”文档了)。
还有另一种方法吗?
最佳方案
我不知道您确切使用的工具以及它们与符号链接的行为,但是您可以使用符号链接(或硬链接,如果需要)使用cp
的-s
选项(或对于硬链接为-l
)自动使用符号链接”copy”整个树。
让我们看下面的例子。
.
├── 1
│ ├── s -> x
│ ├── x
│ ├── y
│ └── z
│ └── 1
└── 2
├── a
│ └── 2
├── b
└── c
如果您希望将1/
文件共符号链接到当前目录中的2/
,则只需执行以下操作:
cp -ans "$PWD/1/"* 2/
现在2/
看起来像:
.
...
└── 2
├── a
│ └── 2
├── b
├── c
├── s -> /home/przemoc/links/1/s
├── x -> /home/przemoc/links/1/x
├── y -> /home/przemoc/links/1/y
└── z
└── 1 -> /home/przemoc/links/1/z/1
使用的cp
选项的说明:
-
-a
或--archive
递归保留属性,链接并复制目录(实际上是-dR --preserve=all
的别名) -
-n
或--no-clobber
防止覆盖现有文件 -
-s
或--symbolic-link
进行符号链接而不是文字复制
在这种情况下,源文件路径必须是绝对的(这就是为什么我使用$PWD
),因为cp
“只能在当前目录中建立相对的符号链接”。