명령줄을 사용하여 파일의 절대 경로를 반환하려고 합니다. 이 문제를 해결하는 방법에는 realpath
, readpath -f
및 locate
명령 등 여러 가지 방법이 있다는 것을 읽었습니다 .
이 중 어느 것도 나에게 효과가 없습니다. 아래와 같이 홈 디렉터리에 있고 아래의 여러 디렉터리에서 파일을 검색하면 끝에 파일이 추가된 현재 디렉터리만 반환됩니다. 마찬가지로 홈 디렉터리에서 파일을 검색하고 현재 디렉터리와 파일을 반환합니다.
[seisemann@localhost ~]$ cd uno
[seisemann@localhost uno]$ ls
dos first
[seisemann@localhost uno]$ cd dos
[seisemann@localhost dos]$ ls
second
[seisemann@localhost dos]$ cd
[seisemann@localhost ~]$ realpath second
/home/seisemann/second
[seisemann@localhost ~]$
내 질문은, 왜 이런 일이 발생하는가입니다. 이러한 명령이 예상대로 작동하지 않는 이유는 무엇입니까?
편집: 존재하는 경우 찾아야 하는 파일의 경로를 반환하는 명령이 있는지 궁금합니다. 어떤 상황에서는 현재 Python 스크립트에서 디렉터리를 열고 터미널 명령을 실행하여 폴더 내부의 파일 경로를 얻으려고 합니다. 반이식적이어야 하므로 경로를 하드코딩하고 싶지 않았지만 찾을 수 있었던 명령이 예상한 대로 작동하지 않았습니다.
답변1
파일이 존재하지 않는 경우실제 경로파일 이름을 현재 경로에 추가하기만 하면 됩니다.
cd /tmp
touch foo
mkdir empty
cd empty
realpath nothing_here
ln -s /tmp/foo nothing_here
realpath nothing_here
먼저 인쇄 /tmp/empty/nothing_here
후 파일이 존재하지 않는다는 결과가 나타납니다.ln
/tmp/foo
매뉴얼 페이지에 따르면 이것이 올바른 것 같습니다.
확인된 절대 파일 이름을 인쇄합니다. 마지막 구성 요소를 제외하고 모두 존재해야 합니다.
따라서 realpath를 사용하여 두 번째 경로의 실제 경로를 찾으려면 유효한 경로를 사용해야 합니다. 파일을 검색하지 않습니다!
realpath ~/uno/dos/second
문제를 해결해야 한다