
두 가지 경로가 있다고 가정 해 보겠습니다. Path1은 정적이고 path2는 동적입니다.
예:
- 경로 1 = /tmp/folder/
- 경로 2=/tmp/folder/dir1/dir1_2
결과:
- 차이점 = /dir/dir1_2
위의 예를 구현하고 싶습니다.
답변1
GNU를 사용하면 realpath
다음을 수행할 수 있습니다.
$ Path1=/tmp/folder
$ Path2=/tmp/folder/dir1/dir1_2
$ realpath -m --relative-to="$Path1" -- "$Path2"
dir1/dir1_2
POSIX/Korn 유사 셸(예: bash)에서 다음 명령을 사용하여 변수에 저장합니다.
Diff=$(realpath -m --relative-to="$Path1" -- "$Path2")
일반적인 주의 사항은 생성된 경로가 줄 바꿈으로 끝나는 경우 제대로 작동하지 않는다는 것입니다.
zsh
대화형 유무에 관계 없이 bash -O lastpipe
:
realpath -zm --relative-to="$Path1" -- "$Path2" |
IFS= read -rd '' Diff
대신 사용할 수 있습니다.
답변2
한 문자열을 다른 문자열에서 빼려는 경우 긴 문자열을 sed 명령으로 파이프하여 더 짧은 하위 문자열을 제거할 수 있습니다.
$ echo $Path2 | sed "s,$Path1,,g"
dir1/dir1_2
sed에는 큰따옴표가 필요합니다. 또한 두 문자열 모두에 / 문자가 있으므로 sed의 기본 구분 기호를 다른 것으로 변경해야 합니다. 여기서는 대신 쉼표를 사용합니다.