2016-09-01 15 views
-2

パス/ディレクトリが存在するか(-d)、ルートディレクトリからの完全パス名はどのようにチェックされますか?ディレクトリが絶対パスとして存在するかどうか確認してください

i.e. ~/mysubdir vs /home/me/mysubdir vs mysubdir. 
  • 私は引数が、それは が存在するルート・パスでない場合は死ぬことを供給します。 Unixに特有のものです。
  • ディレクトリを指定すると、フルルートパスがあれば取​​得しますか?
+3

「ルートパス」と呼ばれるものは通常、絶対パスと呼ばれ、「ルート以外のパス」は相対パスと呼ばれます。 – ThisSuitIsBlackNot

+0

絶対パスは、チルダ展開後にスラッシュで始まるパスです。チルダまたはスラッシュを検索してショートカットを作成し、後で無効なチルダ拡張をコード内で処理できます。 – tripleee

+0

@treepleeeチルダについては注意してください。すべてのプログラムが$ HOMEを意味すると解釈しているわけではありません。 '$ 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でそれをテストできます。

関連する問題