有没有一种简单的方法批量重命名符号链接目标?

5

我可以为文件改名的工具,类似于rename,但是作用于符号链接的目标。

因此,如果我有以下这些:

link1 -> /usr/share/lib-1.2.2/file1
link2 -> /usr/share/lib-1.2.2/file2

我可以做

rename 1.2.2 2.0.3 link*

并且拥有

link1 -> /usr/share/lib-2.0.3/file1
link2 -> /usr/share/lib-2.0.3/file2
2个回答

6
请使用这个脚本:
#!/bin/sh
from="$1"
to="$2"
shift 2
for i
do
  a=$(readlink "$i") && ln -sf "$(echo $a | sed "s@$from@$to@")" "$i"
done

使用示例:

$ ls -l
total 0
lrwxrwxrwx 1 igor igor 6 Jul 12 18:56 1 -> /bin/1
lrwxrwxrwx 1 igor igor 7 Jul 12 18:56 10 -> /bin/10
lrwxrwxrwx 1 igor igor 6 Jul 12 18:56 2 -> /bin/2
lrwxrwxrwx 1 igor igor 6 Jul 12 18:56 3 -> /bin/3
lrwxrwxrwx 1 igor igor 6 Jul 12 18:56 4 -> /bin/4
lrwxrwxrwx 1 igor igor 6 Jul 12 18:56 5 -> /bin/5
lrwxrwxrwx 1 igor igor 6 Jul 12 18:56 6 -> /bin/6
lrwxrwxrwx 1 igor igor 6 Jul 12 18:56 7 -> /bin/7
lrwxrwxrwx 1 igor igor 6 Jul 12 18:56 8 -> /bin/8
lrwxrwxrwx 1 igor igor 6 Jul 12 18:56 9 -> /bin/9
<links>$ bash ../rename-links /bin/ /usr/bin/ *
<links>$ ls -l
total 0
lrwxrwxrwx 1 igor igor 10 Jul 12 18:57 1 -> /usr/bin/1
lrwxrwxrwx 1 igor igor 11 Jul 12 18:57 10 -> /usr/bin/10
lrwxrwxrwx 1 igor igor 10 Jul 12 18:57 2 -> /usr/bin/2
lrwxrwxrwx 1 igor igor 10 Jul 12 18:57 3 -> /usr/bin/3
lrwxrwxrwx 1 igor igor 10 Jul 12 18:57 4 -> /usr/bin/4
lrwxrwxrwx 1 igor igor 10 Jul 12 18:57 5 -> /usr/bin/5
lrwxrwxrwx 1 igor igor 10 Jul 12 18:57 6 -> /usr/bin/6
lrwxrwxrwx 1 igor igor 10 Jul 12 18:57 7 -> /usr/bin/7
lrwxrwxrwx 1 igor igor 10 Jul 12 18:57 8 -> /usr/bin/8
lrwxrwxrwx 1 igor igor 10 Jul 12 18:57 9 -> /usr/bin/9

这正是我想要避免的,但你在 shell-fu 方面做得很好。 - Jan Matějka
我很抱歉,那是不可避免的 :) - Igor Chubin

3

util-linux-2.23

rename(1):
  - 支持新的命令行选项--symlink,用于重命名符号链接目标。

嗨,我正在使用Ubuntu 17.04,但是重命名没有显示--symlink选项,还有其他方法可以做到这一点吗? :〜$ rename -h 用法:     rename [ -h | -m | -V ] [ -v ] [ -n ] [ -f ] [ -e | -E perlexpr ] * | perlexpr     [文件]选项:     -v,-verbose             详细说明:打印成功重命名的文件名称。...    -E     语句:在文件名上执行代码,与-e相同,但以“;”结尾。 - 2705114-john
2
在Debian上,重命名是一些Perl脚本。而util-linux中的rename被安装为rename.ul。我认为在Ubuntu上也应该是一样的。 - Jan Matějka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接