如何在bash中递归地将相对符号链接转换为绝对符号链接?
答案 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....
这会将子目录中的所有绝对链接转换为相对链接。