2016-09-01 85 views
-2

如何检查路径/目录是否存在(-d)并且是根目录中的完整路径名?检查一个目录是否存在绝对路径

i.e. ~/mysubdir vs /home/me/mysubdir vs mysubdir. 
  • 我想提供给死,如果它不是一个根路径 存在的论点。 os特定于unix。
  • 或者,给定一个目录,如果存在它的完整根路径?
+3

只是一些可能使搜索更容易的术语:你称之为“根路径”的东西通常称为绝对路径,而“非根路径”称为相对路径。 – ThisSuitIsBlackNot

+0

绝对路径是在代字符扩展之后以斜线开始的路径。您可以通过查找代字符或斜线来快捷,并在代码中稍后单独处理无效的代字符扩展。 – tripleee

+0

@tripleee关于代字号的小心,并非所有程序都将其解释为$ HOME。尝试'perl -MFile :: Find -e'find(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来测试结果路径是否存在。