나는 이것을 확실하게 (그리고 물론 파일 존재를 확인하지 않고) bash 스크립트 를 작성해야했다.
용법
relpath <symlink path> <source path>
상대 소스 경로를 반환합니다.
예:
#/a/b/c/d/e -> /a/b/CC/DD/EE -> ../../CC/DD/EE
relpath /a/b/c/d/e /a/b/CC/DD/EE
#./a/b/c/d/e -> ./a/b/CC/DD/EE -> ../../CC/DD/EE
relpath ./a/b/c/d/e ./a/b/CC/DD/EE
둘 다 얻다
../../CC/DD/EE
빠른 테스트를 위해 다음을 실행할 수 있습니다.
curl -sL https://github.com/jjqq2013/bash-scripts/raw/master/common/relpath | bash -s -- --test
결과 : 테스트 목록
/a -> / -> .
/a/b -> / -> ..
/a/b -> /a -> .
/a/b/c -> /a -> ..
/a/b/c -> /a/b -> .
/a/b/c -> /a/b/CC -> CC
/a/b/c/d/e -> /a -> ../../..
/a/b/c/d/e -> /a/b -> ../..
/a/b/c/d/e -> /a/b/CC -> ../../CC
/a/b/c/d/e -> /a/b/CC/DD/EE -> ../../CC/DD/EE
./a -> ./ -> .
./a/b -> ./ -> ..
./a/b -> ./a -> .
./a/b/c -> ./a -> ..
./a/b/c -> ./a/b -> .
./a/b/c -> ./a/b/CC -> CC
./a/b/c/d/e -> ./a -> ../../..
./a/b/c/d/e -> ./a/b/CC -> ../../CC
./a/b/c/d/e -> ./a/b/CC/DD/EE -> ../../CC/DD/EE
/a -> /x -> x
/a/b -> /x -> ../x
/a/b/c -> /x -> ../../x
/a -> /x/y -> x/y
/a/b -> /x/y -> ../x/y
/a/b/c -> /x/y -> ../../x/y
/x -> /a -> a
/x -> /a/b -> a/b
/x -> /a/b/c -> a/b/c
/x/y -> /a -> ../a
/x/y -> /a/b -> ../a/b
/x/y -> /a/b/c -> ../a/b/c
./a a/b/c/d/e -> ./a a/b/CC/DD/EE -> ../../CC/DD/EE
/x x/y y -> /a a/b b/c c -> ../a a/b b/c c
BTW,이 스크립트를 저장하지 않고 사용 하고이 스크립트를 신뢰하는 경우 bash 트릭으로 두 가지 방법이 있습니다.
relpath
다음 명령으로 bash 함수로 가져 옵니다. (bash 4 이상 필요)
source <(curl -sSL https://github.com/jjqq2013/bash-scripts/raw/master/common/relpath)
또는 curl bash 콤보와 같이 스크립트를 즉석에서 호출하십시오.
curl -sSL https://github.com/jjqq2013/bash-scripts/raw/master/common/relpath | bash -s -- /a/b/c/d/e /a/b/CC/DD/EE
symlinks
절대 링크를 상대 링크로 변환 하는 데 사용할 수 있습니다 .