2016-09-01 4 views
-2

경로/디렉토리가 존재하고 (-d) 루트 디렉토리의 전체 경로 이름을 어떻게 확인합니까?디렉토리가 절대 경로로 존재하는지 확인하십시오.

i.e. ~/mysubdir vs /home/me/mysubdir vs mysubdir. 
  • 가 나는 가 존재하는 루트 경로가 아닌 경우 죽을 제공된 인수를 원한다. 유닉스에 특화된 OS.
  • 또는 주어진 디렉토리에 전체 루트 경로가 있으면이를 얻으시겠습니까?
+3

"루트 경로"라고 부르는 것을 일반적으로 절대 경로라고하며 "비 루트 경로"를 상대 경로라고합니다. – ThisSuitIsBlackNot

+0

절대 경로는 물결표 확장 후 슬래시로 시작하는 경로입니다. 물결표 또는 슬래시를 찾아 바로 가기를 만들 수 있으며 나중에 코드에서 잘못된 물결표 확장을 별도로 처리 할 수 ​​있습니다. – tripleee

+0

@ tripleee 물결표에주의하십시오. 모든 프로그램이 $ HOME을 의미하는 것으로 해석하지는 않습니다. 'perl -Fileile :: Find -e '를 찾아보십시오 (sub {print "$ File :: Find :: name \ n";}, "~");''--- 아무것도 출력하지 않지만 분명히 가지고 있습니다. '~'에있는 파일들. – Robert

답변

1
use strict; 
use warnings; 
use feature 'say'; 

use Cwd qw/abs_path getcwd/; 
use File::HomeDir; 

my $path = 'foo/../bar'; 

if($path =~ /^~/) { 
    my $home = File::HomeDir->my_home; 
    $path =~ s/^~/$home/; 
} 

if($path !~ m!^/!) { 
    $path = getcwd . "/$path"; 
} 

my $full_path = abs_path($path); 

if(defined $full_path && -d $full_path) { 
    say "$full_path exists"; 
} else { 
    say "$path is non-existant"; 
} 

File::Homedir 당신은 사용자 홈 디렉토리를 얻을 수 있습니다, 당신은 다음 경로에 물결표를 교체 할 수 있습니다.

이 시점의 경로가 / (상대 경로)로 시작하지 않는 경우 절대 경로를 얻으려면 현재 작업 디렉토리 앞에 getcwd을 추가하십시오.

완료하면 abs_path을 통해 전달하여 ...과 같은 기호 및 심볼릭 링크를 해결할 수 있습니다.

마지막으로 -d으로 테스트하여 결과 경로가 있는지 확인할 수 있습니다.

관련 문제