2つのパスがあります。 1つ目はディレクトリ、2つ目はディレクトリまたはファイルです。
/a/b/c
および/a/d/e.txt
最初のパスから2番目のパスへの相対パスは次のようになります。
../../d/e.txt
Linux端末でそれを計算する方法は? 「使用例とは?」と質問する方へたとえば、これを使用して、多数の相対シンボリックリンクを作成できます。
GNU coreutils:
シンボリックリンクの場合、ln
は最近--relative
オプションを学習しました。
それ以外の場合、realpath
はオプション--relative-to=
および--relative-base=
をサポートします。
私にとって、 this 回答(python onelinerを使用)は完璧に機能します。
$ python -c "import os.path; print os.path.relpath('/a/d/e.txt', '/a/b/c')"
../../d/e.txt
Linux(Kubuntu 14.04)とMac OSXで正常にテストされ、Python 2.6。
一貫して利用できないrealpath
に依存せず、依存関係を最小限に抑えるために、これを思いつきました( this answer から少し助けを借りて):
function relative_path_from_to() {
# strip trailing slashes
path1=${1%\/}
path2=${2%\/}
# common part of both paths
common=$(printf '%s\x0%s' "${path1}" "${path2}" | sed 's/\(.*\).*\x0\1.*/\1/')
# how many directories we have to go up to the common part
up=$(grep -o "/" <<< ${path1#$common} | wc -l)
# create a prefix in the form of ../../ ...
prefix=""; for ((i=0; i<=$up; i++)); do prefix="$prefix../"; done
# return prefix plus second path without common
printf "$prefix${2#$common}"
}
両方のパスの共通部分を見つけるためにサブシェルを生成します。多分あなたはそれが好き-私のために働きます。