用于更改符号链接指向的位置的脚本

时间:2012-06-05 00:00:33

标签: linux bash

我想要移动位置的几百个符号链接。现在例如:

randomfile -> /home/me/randomfile
randomfile2 -> /home/me2/randomfile2

有很多像这样的文件。假设我想将符号链接转移到所有链接

randomfile -> ../me/randomfile
randomfile2 -> ../me2/randomfile2

批处理这种方法的最快方法是什么?

1 个答案:

答案 0 :(得分:2)

for f in *; do
  ## if not a symlink, ignore this file
  [[ -L "$f" ]] || continue
  ## determine where it points
  tgt=$(readlink "$f")
  ## if not pointing to /home/*, ignore this file
  [[ $tgt = /home/* ]] || continue
  ## calculate the new target
  new_tgt=../${tgt#/home/}
  ## actually create the new link
  ln -T -sf "$new_tgt" "$f"
done

这使用bash(在/bin/sh模式下不起作用)和GNU ln - 对于ln -T不可用的其他实现,当目标是目录时可能需要额外的逻辑。