2016-09-01 80 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來測試結果路徑是否存在。