- 디렉토리의 전체 파일 이름을 얻는 방법은 무엇입니까?
- 파일 경로에도 루트 디렉터리가 없어야 합니까?
답변1
POSIXly, 경로(현재 디렉토리에 대한 상대 경로, 심볼릭 링크 포함 가능)가 저장된 디렉토리의 심볼릭 링크되지 않은 절대 경로를 얻으려면 다음 $dir
이 제공됩니다.찾다디렉토리에 대한 권한을 얻으려면 다음을 수행하십시오.
(
case $dir in
(/*) CDPATH= cd -P "$dir";;
("") CDPATH= cd -P "";;
(*) CDPATH= cd -P "./$dir";;
esac && pwd -P
)
다음은 다음에서 그대로 복사되었습니다.이 텍스트는 POSIX 사양의 다음 버전에 포함될 예정입니다..
여기에 언급된 대로, 이 경우 현재 지정되지 않은 동작에 의존하거나 작성하는 ""
대신 오류를 인쇄할 수 있습니다 .cd
(
case "${dir:?directory cannot be empty}" in
(/*) CDPATH= cd -P "$dir";;
(*) CDPATH= cd -P "./$dir";;
esac && pwd -P
)
절대적이지 않은 경우 접두사 $dir
with는 시작 시 옵션으로 간주되지 않고 ./
( 충분 함 ) 의미로 해석되지 않는 특수 값에 사용됩니다 .$dir
-
CDPATH= cd -P -- "${dir:?cannot be empty}"
-
cd
$OLDPWD
이전 작업 디렉토리(그리고 CDPATH= OLDPWD=- cd -P -- "${dir:?cannot be empty}"
이 문제를 해결하기 위해 휴대용으로 사용할 수 없습니다).
한 가지 상황은목차현재 디렉터리이고 상위 디렉터리에서 연결이 해제된 경우 절대 경로가 있을 수 없습니다.
$ mkdir 1
$ cd 1
$ rmdir ../1
$ cd -P .
$ ls -ld .
drwxr-xr-x 0 chazelas chazelas 0 Mar 27 06:53 ./
$ [ -d . ] && echo yes
yes
그러나 여전히 존재합니다.
$ pwd -P
.
$ realpath .
realpath: .: No such file or directory
$ readlink -ve .
readlink: .: No such file or directory
파일 시스템에 경로가 없습니다.
이것해당 파일이나 디렉터리가 없습니다.error는 디렉토리가 존재하기 때문에 약간 오해의 소지가 .
있지만(비록 그것으로 많은 일을 할 수는 없지만) 적어도 Linux에서는 errno getcwd()
를 반환하면 ENOENT
현재 디렉토리가 연결 해제되었음을 나타냅니다.
답변2
상대 경로는 현재 디렉터리에 상대적이므로 루트 디렉터리를 포함하지 않습니다.
예:
development/project/src
src
현재 디렉터리 아래의 2단계 디렉터리라는 상대 경로입니다. 경로는 src
디렉터리 이름인지, 파일 이름인지, 아니면 다른 이름인지를 나타내지 않습니다 .
Linux 시스템에서는 이 realpath
유틸리티를 사용하여 이름의 전체(절대) 경로를 얻을 수 있습니다.
$ realpath development/project/src
/home/myuser/work/development/project/src
절대 경로는 항상 루트 디렉터리로 시작됩니다. 보다 정확하게는 현재 프로세스의 루트 디렉터리에서 시작하며, 명령을 사용하여 변경할 수 있습니다 chroot
.
대부분의 Unix 시스템에서는 현재 디렉터리에서 시작하는 상대 경로 앞에 접두사를 붙여 절대 경로를 얻을 수 있습니다 $PWD
.
$ printf '%s\n' "$PWD/development/project/src"
/home/myuser/work/development/project/src
그러나 이는 단지 문자열 연결일 뿐이며 정확히 같은 방식으로 경로를 확인하지는 않습니다 realpath
. 주어진 상대 경로가 정확하면 기능적 절대 경로가 제공됩니다.