将相对符号链接转换为绝对符号链接

时间:2010-11-15 17:39:03

标签: bash

如何在bash中递归地将相对符号链接转换为绝对符号链接?

2 个答案:

答案 0 :(得分:17)

ln -sf "$(readlink -f "$link")" "$link"

答案 1 :(得分:5)

以防万一有人在寻找逆向操作:从绝对链接转换为亲戚:

使用python:

find . -lname "`pwd`*" -exec sh -c 'ln -snvf `python -c "from os.path import *; print relpath(\"$(readlink {})\",dirname(\"{}\"))"` {}' \;

仅使用bash和sed:

find . -lname "`pwd`/*" -depth 1 -exec sh -c 'ln -snvf `echo $(readlink {}) | sed "s|\`pwd\`|.|"` {}' \;
find . -lname "`pwd`/*" -depth 2 -exec sh -c 'ln -snvf `echo $(readlink {}) | sed "s|\`pwd\`|..|"` {}' \;
find . -lname "`pwd`/*" -depth 3 -exec sh -c 'ln -snvf `echo $(readlink {}) | sed "s|\`pwd\`|../..|"` {}' \;
etc....

这会将子目录中的所有绝对链接转换为相对链接。