경로 차이를 가져와 변수에 저장하는 방법

경로 차이를 가져와 변수에 저장하는 방법

두 가지 경로가 있다고 가정 해 보겠습니다. 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의 기본 구분 기호를 다른 것으로 변경해야 합니다. 여기서는 대신 쉼표를 사용합니다.

관련 정보