如何将所有符号链接更改为新路径

如何将所有符号链接更改为新路径

请,我想将符号链接更改为新路径
我的符号链接采用这种形式

lrwxrwxrwx. 1 s01 s01 56 Mar 22 13:17 zmjppcxlpq2m.png -> /home/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m
lrwxrwxrwx. 1 s01 s01 56 Mar 23 17:03 znviy3civtq3.jpg -> /home/s01/public_html/cgi-bin/uploads/00029/znviy3civtq3
lrwxrwxrwx. 1 s01 s01 56 Mar 24 20:07 zoi46hh4pu32.jpg -> /home/s01/public_html/cgi-bin/uploads/00029/zoi46hh4pu32
lrwxrwxrwx. 1 s01 s01 56 Mar 23 18:22 zqt0h1gy9e4c.png -> /home/s01/public_html/cgi-bin/uploads/00029/zqt0h1gy9e4c

/home我将所有文件从转移到新部分/home2

所以我想将所有符号链接更改为新路径。例如: 旧:

zmjppcxlpq2m.png -> /home/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m

我希望有

zmjppcxlpq2m.png -> /home2/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m

对于所有文件。我能做些什么?

答案1

ln您可以通过强制更改软链接的目标而不删除旧的目标。

ln -f -s /new/location/to/link newlink

例如:

ln -f -s /home2/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m zmjppcxlpq2m.png

或者你可以用 mv 进行原子替换:

ln -s /home2/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m new_zmjppcxlpq2m.png
mv new_zmjppcxlpq2m.png zmjppcxlpq2m.png

要更改某个目录中的所有链接,请尝试使用类似以下命令:

find /dir/with/symlinks/ -lname "/home/s01/public_html/cgi-bin/uploads/00029/*" \
    -exec  sh -c 'ln -sf `echo $(readlink $0) | sed s/home/home2/` $0' {} \;

在执行任何命令之前请小心备份所有符号链接

相关内容