2012-09-05 91 views
13

我只有一個文件名是myfile.txt,我不確定它在哪裏保存。我如何得到存儲文件的確切完整路徑。 我試圖如何獲得perl文件的確切完整路徑

$string=`ls /abc/def/*/*/*/*/myfile.txt`; 

結果:完整路徑是/abc/def/ghi/jkl/mno/pqr/myfile.txt

我能夠通過使用上述perl腳本運行shell command獲得的完整路徑。然而,這需要很長時間才能返回路徑。有沒有辦法通過使用perl來查找文件的完整路徑?

+0

請定義「完整路徑」。一個文件可能有多個文件。它可能包括符號鏈接? – reinierpost

回答

16

好吧,如果myfile.txt實際上是該文件的相對路徑,有應該是一個核心模塊子 - File::Spec->rel2abs()

use File::Spec; 
    ... 
    my $rel_path = 'myfile.txt'; 
    my $abs_path = File::Spec->rel2abs($rel_path) ; 

...如果你確實需要通過你的目錄,該文件搜索,那裏有File :: Find ...但是我可能會用shell find/-name myfile.txt -print命令。

+0

嗨Rainna.I,對不起,它不是相對路徑。我試過上面的代碼,結果返回將是我的<執行路徑> /myfile.txt – Steven

+0

@Steven是的,因爲'rel2abs'實際上並不嘗試尋找那個文件。如何使用我給出的'find'命令?或者您可能需要嚴格的Perlish解決方案? )然後File :: Find是要走的路。 – raina77ow

12

您應該使用Perl模塊Cwd來完成此操作。該鏈接的例子也在下面看到。

#!/usr/bin/perl 
use Cwd; 
my $dir = getcwd; 
use Cwd 'abs_path'; 
my $abs_path = abs_path($file); 
+3

這會產生一個絕對路徑,但它可能仍然包含符號鏈接;例如您可能不會得到指向文件所在文件系統根目錄的路徑。 – reinierpost

4

我們可以看看從系統上的任何地方,但在這種情況下,我們從「/ ABC/DEF」文件夾中尋找。

$start_path = "/abc/def/"; 
@files = <$start_path*/myfile.txt> 

foreach $file(@files) { 
    print $file; # prints full path of file. 
} 

我知道帖子是在一年前發佈的,但有些人可能仍然會看這個問題。

相關問題