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

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

cp -s不能recursion工作。

我搜索了一下,发现了一个叫做lns的命令,可以从这里获得 。

我只是在linux上做了一个快速的测试, cp -sR /orig /dest就是你所描述的:创建一个目录层次结构,将非目录的符号链接返回到原始目录。

 cp -as /root/absolute/path/name dest_dir 

会做你想要的。 请注意,源名称必须是绝对路径,不能是相对的。 否则,你会得到这个错误:“xyz-file:只能在当前目录中做相对符号链接。”

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

 cp -as /root/absolute/path/name/* dest_dir/ cp -as /root/absolute/path/name/.* dest_dir/ 

从上面的原始和新目录开始,我认为这对find(1)命令将会做你所需要的:

 find original -type d -exec mkdir new/{} \; find original -type f -exec ln -s {} new/{} \; 

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

还有一个“lndir”工具(来自X),它可以做这样的事情; 我发现这里提到: Debian Bug报告#301030:我们可以将lndir移动到coreutils或debianutils吗? ,现在我快乐地使用它了。

如果你觉得你的手脏了这是一个技巧,将自动创建目的地文件夹,子文件夹和符号链接所有文件递归。

在您要符号链接和子文件夹的文件所在的文件夹中:

  1. 创建一个文件shell.sh:

    nano shell.sh

  2. 复制并粘贴这个charmer:

#!/bin/bash

 export DESTINATION=/your/destination/folder/ export TARGET=/your/target/folder/ find . -type d -print0 | xargs -0 bash -c 'for DIR in "$@"; do echo "${DESTINATION}${DIR}" mkdir -p "${DESTINATION}${DIR}" done' - find . -type f -print0 | xargs -0 bash -c 'for file in "$@"; do ln -s "${TARGET}${file}" "${DESTINATION}${file}" done' - 
  1. 保存文件ctrl+O
  2. 关闭文件ctrl+X
  3. 使您的脚本可执行文件chmod 777 shell.sh

  4. 运行脚本./shell.sh

快乐的黑客!

我知道这个问题是关于shell的,但是既然你可以从shell调用perl,我写了一个工具来做一些非常相似的事情,并且在几年前把它发布在perlmonks上 。 就我而言,我通常希望目录保持链接,直到我决定不是。 这将自动和递归地做这个相当微不足道的改变。