우리는 두 가지 경로가 있습니다. 첫 번째는 디렉토리이고, 두 번째는 디렉토리 또는 파일입니다.
/a/b/c
과 /a/d/e.txt
첫 번째 경로에서 두 번째 경로로의 상대 경로는 다음과 같습니다.
../../d/e.txt
리눅스 터미널에서 어떻게 계산합니까? “사용 사례는 무엇입니까?”
답변
GNU coreutils 가정 :
-
심볼릭 링크의 경우
ln
최근에--relative
옵션을 배웠습니다 . -
다른 모든 경우
realpath
에는 옵션--relative-to=
및을 지원합니다--relative-base=
.
답변
나에게, 이 대답 (파이썬 oneliner를 사용하는)은 완벽하게 작동합니다.
$ python -c "import os.path; print os.path.relpath('/a/d/e.txt', '/a/b/c')"
../../d/e.txt
Mac OSX에서 Linux (Kubuntu 14.04)에서 성공적으로 테스트되었으므로 Python 2.6이 필요합니다.
답변
realpath
그것에 의존 하지 않고 지속적으로 사용할 수 없으며 종속성을 최소화하기 위해이 답변을 약간 얻었습니다 .
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}"
}
두 경로의 공통 부분을 찾기 위해 서브 쉘을 생성합니다. 어쩌면 당신이 그것을 좋아-나를 위해 작동합니다.