我想要移动位置的几百个符号链接。现在例如:
randomfile -> /home/me/randomfile
randomfile2 -> /home/me2/randomfile2
有很多像这样的文件。假设我想将符号链接转移到所有链接
randomfile -> ../me/randomfile
randomfile2 -> ../me2/randomfile2
批处理这种方法的最快方法是什么?
答案 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
不可用的其他实现,当目标是目录时可能需要额外的逻辑。