Linux – 使用单个命令更新多个符号链接

克隆使用符号链接的环境时,符号链接将被复制(从生产到克隆),但仍指向原始(生产)文件。 我希望他们指向克隆的文件,如:

原版的:

/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 {} \;