【问题标题】:How to copy recursive directory structure while creating symbolic file links only? [closed]如何在仅创建符号文件链接时复制递归目录结构? [关闭]
【发布时间】:2012-09-20 21:29:02
【问题描述】:

复制整个递归目录结构的最佳方法是什么,其中所有文件都被复制为符号链接?

换句话说,副本应该反映原始目录的整个目录(子)结构,但每个文件应该只是一个符号链接。

【问题讨论】:

  • 你熟悉findln吗?
  • 你能否提供一个小例子来说明你所追求的,所以如果有人确实想出了一些东西,他们至少会朝着你想要的方向前进?我假设您希望目录作为目录?
  • 还有——你确定这是你想做的吗?这意味着在两个目录中都可以看到对文件的任何修改,但不会共享任何 new 文件或目录,并且任何 deleted 文件或目录都会导致损坏符号链接。所以这两个目录会有一个奇怪的同步和不同步混合。通常人们要么在顶层使用ln,这样两个目录就被符号链接并完全同步,或者递归地使用cp,这样两个目录之后就完全独立了。
  • 为@ruakh +1 ...这听起来像XY problem。你想解决什么问题?你到底想做什么?

标签: unix directory copy symlink


【解决方案1】:

我猜...首先您要创建目录...

cd "$source"
find . -type d -exec mkdir -p "$target/{}" \;

接下来,制作您的符号链接...

cd "$source"
find . -type f -print | (
    cd "$target"
    while read one; do
        deep=$(echo "${one:2}" | sed 's:[^/][^/]*:..:g')
        ln -s "${deep:3}/${one:2}" "$(basename "$one")"
    done
)

请注意,如果您的文件名中有换行符或其他奇怪的字符,这将失败。我想不出一个快速的方法来解决这个问题(我的意思是在find -exec 中执行此操作),因为您需要为每个级别的目录计算不同的 $deep。

另外,这是未经测试的,我不打算测试它。如果它能给你灵感,那就太好了。 :)

【讨论】:

    【解决方案2】:

    这不是生成符号链接但会生成硬链接的解决方案。

    cp -rl $src $dst
    

    缺点:

    • 很难查看文件是否在树中被替换
    • 两棵树应该在同一个文件系统上

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 2012-02-24
      • 2011-11-14
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2014-08-06
      • 2014-12-10
      相关资源
      最近更新 更多