linux shell脚本复制目录树和链接文件

时间:2014-07-13 01:26:39

标签: linux shell hyperlink directory

我希望能够创建目录树的副本并对其上的文件进行软链接。

例如,来自

/home/user/origin/a/sub/file.txt

我想得到

/home/user/destination/a/sub/file.txt

将此链接指向原始文件.txt。

我用

进行了测试
find /home/user/origin/ -type d -printf "mkdir -vp '/home/user/destination%p'\n" -o -type f -printf "ln -vs '%p' '/home/user/destination%p'\n" | sh

但它有两个问题:

  1. 我想从原点复制到目的地,并从原点复制到/home/user/destination/home/user/origin。这不是一个大问题,因为我之后可以采取行动
  2. 如果文件名类似于

      

    五十年来我们都会被Chicks.txt

  3.      由于'。

    ,它停止工作

1 个答案:

答案 0 :(得分:0)

假设我理解您尝试做的事情,使用-exec

似乎更容易
find /home/user/origin/ \
-type d -exec sh -c 'mkdir -v "/home/user/destination/${0#/home/user/origin/}"' {} \; \
-o \
-type f -exec sh -c 'ln -vs "$0" "/home/user/destination/${0#/home/user/origin/}"' {} \;

注意-or的优先级低于默认的-and,这一点非常重要。