bash script2023. 4. 17. 16:39

반달가면 이글루에서 백업 - http://bahndal.egloos.com/555894

 

리눅스 bash 스크립트에서 상대경로(relative path)를 절대경로(absolute path)로 바꿔서 표시하는 방법이다.

예를 들어 입력값이 "../abc", "~/downloads" 이런 식이라면 이것을 "/temp/data/abc/", "/home/john/downloads" 이런 식으로 절대경로 표시로 바꾸는 것이다. readlink 명령으로 간단하게 바꿀 수 있다.

우선 readlink의 -e 옵션을 보자. 입력하는 상대경로의 모든 항목이 유효해야 한다. 예를 들어 입력한 경로에 있는 디렉토리가 실제로 존재하지 않는다면 변환이 이루어지지 않는다.

# -e 옵션: 해당 항목이 모두 유효해야 함
readlink -e "~/downloads"
/home/john/downloads
# 존재하지 않는 경로일 경우 변환되지 않아 출력값이 없음
readlink -e "~/downloadsss"

반대로, -m 옵션을 이용하면 입력하는 상대경로의 항목에 대해 유효성을 따지지 않는다.

# -m 옵션: 항목에 대한 유효성 무시
readlink -m "~/downloadsss"
/home/john/downloadsss

출력값을 다른 명령어 또는 어플리케이션의 인자로 넘겨야 할 경우 출력값에서 줄바꿈(new line)을 제거할 필요가 있을 수도 있다. -n 옵션을 추가하면 된다. -n 옵션을 안 썼다고 문제가 된 적이 없기는 하나 혹시 몰라서 적어두기로.

# -n 옵션 추가: 출력할 때 줄바꿈 제거
path_info=`readlink -e -n "~/downloads"`
# 예시: 출력값을 find 명령의 인자로 사용
find "$path_info" -type f

스크립트에서 인자(argument)로 경로 정보를 받아서 이런 저런 작업을 처리할 때 절대경로 기준으로 통일하기 위해 가끔 사용중.

728x90
Posted by 반달가면