bash에서 pathname 간략화하기

auditory의 이미지


저장된 파일목록을 처리하다보니,
아래와 같은 파일이름들을 다루어야할 일이 있습니다.

../path1/path2/../paht3/path4/../../path3/file1

이런 경우에 자동으로 실제 파일 패스를 가지고 오게 하는 간단한 방법이
있을까요??

path=$(cd $there; pwd; cd -)

좀 더 간단한 방법도 있을것 같아서 질문 올려봅니다.

(가급적이면 상대 path를 유지할 수 있는.. )

neocoin의 이미지

man readlink

검색해보니...

http://fritzthomas.com/open-source/linux/384-how-to-get-the-absolute-path-within-the-running-bash-script/

a.sh

#!/usr/bin/env bash  
there=$(readlink -f $1)                                                                       
echo $there

run

$:~/temp$ ./a.sh ../..
/home
정도가 있겠네요.

$() 문법 몰랐는데 감사해요. :) 늘 ` 를 썼거든요.

woonuk의 이미지

상대 path를 유지한다는게 어떤 의미인지 판단하기 힘든데,

dirname, basename, readlink 명령을 활용하면 될거 같네요.

auditory의 이미지


입력이

there=../path1/path2/../path3/../../path4/file1

이라고 했을때

출력이

../path4/file1

이라고 나왔으면 좋겠다는 의미입니다.
제가 쓴 방법의 경우 절대 경로가 나와서요..