在克隆使用符号链接的环境时,会复制符号链接(从生产到克隆),但它们仍然指向原始(生产)文件。我希望他们指向克隆的文件,例如:
原件:
/production/symlink1 > /production/directory/file1
/production/foo/symlink2 > /production/directory/sub/file2
克隆(现在)之后:
/clone/symlink1 > /production/directory/file1
/clone/foo/symlink2 > /production/directory/sub/file2
我想:
/clone/symlink1 > /clone/directory/file1
/clone/foo/symlink2 > /clone/directory/sub/file2
有没有办法用一个命令来实现它?
答案 0 :(得分:1)
您是否自己创建了链接?如果是,您可以使用-r
参数创建它们。见man ln
:
-r, - relative
create symbolic links relative to link location
答案 1 :(得分:1)
如果链接指向绝对路径,则复制后它们将始终指向相同的路径。这是绝对路径之美,我认为你无法解决这个问题。
您可以尝试在复制后重写这些链接。例如,如果您创建这样的脚本relink.sh
:
#!/bin/bash
for link; do
target=$(readlink "$link")
[[ $target =~ ^/production ]] || continue
newtarget=$(echo $target | sed -e s?/production?/clone?)
echo ln -snf "$newtarget" "$link"
done
将符号链接列表传递给此脚本,它将检查它们是否指向/production
下的某个路径,并重新创建/production
替换为/clone
的链接。您可以这样称呼它,例如:
find /clone -type l -exec ./relink.sh {} \;