克隆使用符号链接的环境时,符号链接将被复制(从生产到克隆),但仍指向原始(生产)文件。 我希望他们指向克隆的文件,如:
原版的:
/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
有一种方法可以用一个命令来实现吗?
你自己创建了链接吗? 如果是的话,你可以用-r
参数创建它们。 见man ln
:
-r, – 相对
create symbolic links relative to link location
如果链接指向绝对路径,复制后它们将始终指向相同的路径。 这是绝对路径的美丽,我不认为你可以解决这个问题。
您可以尝试在复制后重写这些链接。 例如,如果你创建一个像这样的脚本relink.sh
:
#!/bin/bash for link; do target=$(readlink "$link") [[ $target =~ ^/production ]] || continue newtarget=$(echo $target | sed -es?/production?/clone?) echo ln -snf "$newtarget" "$link" done
将符号链接列表传递给此脚本,它将检查它们是否指向/production
下的某个路径,并用/clone
替换/production
重新创建链接。 你可以这样称呼它:
find /clone -type l -exec ./relink.sh {} \;