一次更改多个符号链接?

一次更改多个符号链接?

我的目录中有大约 40 个符号链接,如下所示:

lrwxr-xr-x    1 anna  staff    45B 22 Jun 11:20 menu-bg-left.jpg -> ../../../../../hg/www/images/menu-bg-left.jpg
lrwxr-xr-x    1 anna  staff    46B 22 Jun 11:20 menu-bg-right.jpg -> ../../../../../hg/www/images/menu-bg-right.jpg

我想将它们全部更改为不同的目录:

lrwxr-xr-x    1 anna  staff    45B 22 Jun 11:20 menu-bg-left.jpg -> ../../../../../code-local/www/images/menu-bg-left.jpg
lrwxr-xr-x    1 anna  staff    46B 22 Jun 11:20 menu-bg-right.jpg -> ../../../../../code-local/www/images/menu-bg-right.jpg

由于各种原因,我不能仅仅将hg目录符号链接到code-local目录,我需要更改链接本身。

我可以以某种方式编写这个脚本吗?

答案1

您将 dir 更改为要放置符号链接的目录。然后,在 for 循环中从源目录读取所有图像。每次运行循环都会创建一个符号链接。

#!/bin/bash
for file in /to/directory/where/symlinks/should/be/*
do
   rm $file
   ln -s /where/your/image/files/are/$(basename $file) $file
done

答案2

您可以使用和 shell 的组合readlink,例如:

#!/bin/sh
cd /to/directory/where/symlinks/should/be
for i in * ; do
    if [ -h $i ]; then
        NEWTARGET=`readlink $i | sed 's,old/path/to/files,new/path/to/files,'`
        rm -f $i
        ln -s $NEWTARGET $i
    fi
done

相关内容