我想创建目录 D 的影子目录。影子目录 D1 应具有与 D 相同的结构,但不应与 D 共享任何节点。D 中的每个文件都应由 D1 中该文件的符号链接表示。想法是,对 D1 的操作永远不应修改 D,这样我就可以自由删除 D1 中的任何内容而不会影响 D。我该如何实现这一点?我当然可以对 D 进行简单的树形复制,但这会生成文件的重复副本。
[以下内容来自评论。] 这是我想要实现的目标。我有一些音乐文件分散在各个地方。我可以创建一个目录 D,其中包含指向所有文件的符号链接。我的计划是创建影子目录 D1,该目录最初包含 D 的符号链接的副本。当我播放音乐时,我会从 D1 中删除其节点,这样 D1 只包含指向我未播放过的音乐的指针(在 D 中的各个级别)。同时,我的原始音乐库未经修改。我意识到可能还有其他方法可以实现同样的目标,但这种方法在概念上很简单,只需要标准的 shell 编程。
答案1
除了使用ln
,您还可以cp
使用-s
标志创建指向文件的符号链接。这很有用,因为它仍然适用于-r
和-a
标志,这意味着您可以克隆整个符号链接树,从 D 到 D1。
为了正常工作,D 必须是绝对路径,或者使用 转换为绝对路径$(realpath D)
。
综合起来:
cp -asT "$(realpath D)" D1
需要明确的是,编辑 D1 中的文件仍会更改 D 中的原始文件,但可以安全地删除 D1 中的链接。