Unix 如何在仅创建符号文件链接时复制递归目录结构?

Unix 如何在仅创建符号文件链接时复制递归目录结构?,unix,directory,copy,symlink,Unix,Directory,Copy,Symlink,复制整个递归目录结构的最佳方法是什么,其中所有文件都作为符号链接复制 换句话说,副本应该镜像原始目录的整个目录(子)结构,但每个文件应该只是一个符号链接。我想。。。首先,你想让你的目录 cd "$source" find . -type d -exec mkdir -p "$target/{}" \; 接下来,制作您的符号链接 cd "$source" find . -type f -print | ( cd "$target" while read one; do

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


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

我想。。。首先,你想让你的目录

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


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

这不是制作符号链接的解决方案,而是制作硬链接

cp -rl $src $dst
缺点:

  • 很难看到文件是否在树中被替换
  • 这两个树应该位于同一个文件系统上

?您是否熟悉
查找
项次
?您能否提供一个小例子,说明您所追求的目标,这样,如果有人提出了一些建议,他们至少会朝着您想要的方向走?我假设你想要目录作为目录?还有--你确定这就是你想要做的吗?这意味着对文件的任何修改都会出现在两个目录中,但任何新文件或目录都不会共享,任何删除的文件或目录都会导致符号链接中断。因此,这两个目录将有一个奇怪的混合同步和不同步。通常,人们要么在顶层使用
ln
,使两个目录符号链接并完全同步,要么递归使用
cp
,使两个目录在之后完全独立。@ruakh的+1。。。这听起来像是一个错误。你想解决什么问题?你到底想干什么?