符号链接 - 复制目录层次结构

Max*_*ing 22 unix directory shell symlink file

Linux上"复制"目录层次结构的最简单方法是什么,以便创建新的目录层次结构,而所有"文件"只是指向源层次结构上的实际文件的符号链接?

cp -s 不会递归地工作.

fre*_*eit 30

我刚刚对linux盒子进行了快速测试,cp -sR /orig /dest并完全按照你的描述进行操作:创建一个目录层次结构,其中非目录的符号链接返回到原始目录.

  • 你得到"xyz-file:只能在当前目录中创建相对符号链接"的原因是因为对于源目录,你指定了一个相对路径.如果为源指定绝对路径,它将按您的意愿工作,如下所示:"cp -sR/root/absolute/path/name dest". (25认同)
  • 如果您需要/想要使所有符号链接相对,您可以使用[symlinks](http://www.linuxcommand.org/man_pages/symlinks8.html),如下所示:`cp -sR/orig/dest && symlinks -rc/dest` (5认同)
  • 不适用于所有系统.在Mac/PowerPC上,我得到:`cp:illegal option-s`,所以如果你需要制作一个可移植的脚本,你需要一个不同的方法. (4认同)
  • 它仅适用于第一个目录级别。对于子目录中的每个文件,我得到“xyz-file:只能在当前目录中建立相对符号链接”。(在 Ubuntu 8.10,cp 版本 6.10) (3认同)

Pon*_*ars 13

cp -as /root/absolute/path/name dest_dir
Run Code Online (Sandbox Code Playgroud)

会做你想做的.请注意,源名称必须是绝对路径,它不能是相对的.否则,您将收到此错误:"xyz-file:只能在当前目录中创建相对符号链接."

另外,要小心你要复制的内容:如果dest_dir已经存在,你必须做类似的事情:

cp -as /root/absolute/path/name/* dest_dir/
cp -as /root/absolute/path/name/.* dest_dir/
Run Code Online (Sandbox Code Playgroud)


Dre*_*ens 11

从原始目录和新目录开始,我认为这对find(1)命令将满足您的需求:

find original -type d -exec mkdir new/{} \;
find original -type f -exec ln -s {} new/{} \;
Run Code Online (Sandbox Code Playgroud)

第一个实例通过仅查找原始树中的目录并在新树中重新创建它们来设置目录结构.第二个创建新树中原始文件的符号链接.


imz*_*hev 7

还有"lndir"实用程序(来自X)做了这样的事情; 我发现它在这里提到:Debian Bug报告#301030:我们可以将lndir移动到coreutils或debianutils吗?,我现在很高兴使用它.

  • 我遇到了原始提问者的确切问题,在开始编写shell脚本代码后,找到了这个答案并发现已经安装了lndir.完全按照我的需要工作. (2认同)

Jes*_*erE 1

我用谷歌搜索了一下,发现了一个名为 的命令lns,可以从这里获得。