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

时间:2009-08-06 18:37:54

标签: file shell unix directory symlink

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

cp -s递归不起作用。

7 个答案:

答案 0 :(得分:29)

我刚刚对linux框进行了快速测试,而cp -sR /orig /dest完全按照您的描述进行:创建一个目录层次结构,其中非目录的符号链接返回到原始文件。

答案 1 :(得分:13)

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/

答案 2 :(得分:11)

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

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

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

答案 3 :(得分:7)

还有“lndir”实用程序(来自X)做了这样的事情;我在这里提到它:Debian Bug report #301030: can we move lndir to coreutils or debianutils?,我现在很高兴使用它。

答案 4 :(得分:1)

我用Google搜索了一下,找到了一个名为lns的命令,可从here获得。

答案 5 :(得分:1)

如果你想弄脏你的手 这是一个技巧,可以递归地自动创建所有文件的目标文件夹,子文件夹和符号链接。

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

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

    nano shell.sh

  2. 复制并粘贴此有魅力的人:
  3. #!/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

    5. 快乐的黑客攻击!

答案 6 :(得分:0)

我知道问题是关于shell的,但是因为你可以从shell调用perl,所以我写了一个工具来做一些与此类似的事情,并在几年前在posted it上编写了perlmonks。在我的情况下,我通常希望目录保持链接,直到我另有决定。

,这是一个相当微不足道的变化