检查目录是否存在为绝对路径

时间:2016-09-01 15:16:33

标签: perl unix system

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

i.e. ~/mysubdir vs /home/me/mysubdir vs mysubdir. 
  • 如果不是根路径,我希望提供的参数死掉 存在。特定于unix的操作系统。
  • 或者,给定一个目录,如果存在则获取其完整的根路径?

1 个答案:

答案 0 :(得分: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对其进行测试,以查看结果路径是否存在。