私が書かなければならなかった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
ところで、このスクリプトを保存せずに使用し、このスクリプトを信頼する場合は、bashトリックを使用してこれを行う2つの方法があります。
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
絶対リンクを相対リンクに変換するために使用できます。