代码之家  ›  专栏  ›  技术社区  ›  Eric

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

  •  10
  • Eric  · 技术社区  · 14 年前

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

    2 回复  |  直到 11 年前
        1
  •  17
  •   John Kugelman Michael Hodel    14 年前
    ln -sf "$(readlink -f "$link")" "$link"
    
        2
  •  5
  •   Timothy Basanov    12 年前

    以防万一有人在寻找反向操作:从绝对链接到相对链接:

    使用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....
    

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