cwd 경로의 일부인 하위 디렉터리를 어떻게 참조합니까?

cwd 경로의 일부인 하위 디렉터리를 어떻게 참조합니까?

모든 수준의 깊이에 중첩된 cwd를 따라 경로를 참조하는 일반적인 방법이 있습니까? 이것은거의역방향 상대 경로 조회와 같습니다.

예를 들어:

$ pwd
/Users/somebody/foo/bar/baz

$ echo /[3] <-- 3rd directory from / in current path
/Users/somebody/foo

$ echo ~/[1]   <-- 1 directory from ~ in current path
~/foo

답변1

다음 기능을 다음 항목에 추가하세요 .bashrc.

parent() {
        local count
        local arg

        count=$(($1+1))
        if [ "$2" = "" ]
        then
                arg="$PWD"
        else
                arg="$2"
                if [[ $arg != /* ]]
                then
                        printf 'Warning: "%s" does not begin with "/".\n' "$arg"
                fi
        fi
        cut -d/ -f1-"$count" <<< "$arg"
}

tparent() {                                     # The ‘t’ stands for “tilde”.
        local count
        local arg
        local home

        count=$(($1+1))
        if [ "$2" = "" ]
        then
                arg="$PWD"
        else
                arg="$2"
        fi
        if [ "$3" = "" ]
        then
                home="$HOME"
        else
                home="$3"
        fi
        if [[ $home != /* ]]
        then
                printf 'Warning: "%s" does not begin with "/".\n' "$home"
        fi
        if [[ $arg/ != $home/* ]]
        then
                printf 'Error: "%s" does not begin with "%s".\n' "$arg" "$home"
                return 1
        fi
        printf '%s' "~${arg/$home}" | cut -d/ -f1-"$count"
}

첫 번째 추출에 사용됩니다.cut -d/ -f1-numberN경로명의 구성 요소입니다.  number~ 해야 하다N첫 번째 필드 앞의 빈 문자열이 /첫 번째 필드로 간주되기 때문에 +1입니다.

용법:

$ pwd
/home/gman/stack/JW

$ parent 3
/home/gman/stack

$ tparent 1
~/stack

이는 공백과 탭이 있는 경로를 처리할 수 있지만 개행 문자는 처리할 수 없습니다.

관련 정보