2011-02-03 37 views
5

# Test-> a.plcách lấy Đường dẫn tuyệt đối cho tệp liên kết tượng trưng?

my $file = '/home/joe/test'; 
if (-f $file && -l $file) { 
    print readlink($file) ; 
} 

làm thế nào để có được đường dẫn tuyệt đối cho tập tin liên kết tượng trưng?

+0

bạn có muốn biết đường dẫn tuyệt đối của liên kết tượng trưng hoặc đường dẫn tuyệt đối của tệp mà liên kết tượng trưng trỏ tới không? – iain

+0

đường dẫn tuyệt đối của tệp mà liên kết tượng trưng trỏ đến – Tree

+0

Vì vậy, thực sự bạn chỉ muốn biết cách lấy đường dẫn tuyệt đối cho một tên đường dẫn nhất định, bởi vì bạn đã biết cách sử dụng 'readlink()' để nhận đường dẫn tới tập tin. –

Trả lời

10

Cwd cung cấp chức năng này bằng cách abs_path.

#!/usr/bin/perl -w 

use Cwd 'abs_path'; 

my $file='/home/joe/test'; 
if(-f $file && -l $file) { 
    print abs_path($file); 
} 
+0

Cẩn thận, điều đó có thể sẽ sai khi tên tệp UTF-8 được sử dụng. Trong trường hợp đó một cái gì đó giống như 'Mã hóa :: decode_utf8 (Cwd :: abs_path ($ file));' có thể là cần thiết! –

3

nếu bạn sử dụng File :: rel2abs Spec cùng với readlink bạn sẽ nhận được con đường abs ngay cả khi đó là một liên kết tượng trưng đến một liên kết tượng trưng

use File::Spec; 

$path = File::Spec->rel2abs(readlink($file)) ; 
+0

File :: Rel2abs của Spec dường như không hoạt động với nhiều liên kết. Abs_path của Cwd hoạt động. Hãy thử 'touch/tmp/target; ln -s target/tmp/link1; ln -s link1/tmp/link2' và so sánh 'perl -MFile :: Spec -e '$ f ="/tmp/link2 "; in "$ f:", Tệp :: Spec-> rel2abs (readlink ($ f)), "\ n" ''với' perl -M'Cwd "abs_path"' -e '$ f = "/ tmp/link2 "; in "$ f:", abs_path ($ f), "\ n" '' – mivk

+0

Cảm ơn bạn đã chứng minh rằng chỉ định liên kết mềm không có tiền tố đường dẫn khi bạn không ở trong cùng một thư mục sẽ phá vỡ mọi thứ và do đó, điều cần làm ;-) – iain

+0

Tôi cũng nên chỉ ra rằng OP đã yêu cầu ["đường dẫn tuyệt đối của tệp mà liên kết tượng trưng trỏ tới"] (http://stackoverflow.com/questions/4887672/how-to-get- the-absolute-path-for-symlink-file # comment-5437184) và * không * đường dẫn kinh điển (là đường dẫn tuyệt đối nhưng _không nhất thiết_ tệp được yêu cầu)? – iain

-1

Tất cả đều sai, nhìn vào kiểm tra và đúng cách. Xem this link

my $good = \`readlink -f $0\`; 
+4

hmm ... tạo lưu lượng truy cập cho trang web của bạn? – kleopatra

+2

Chỉ hoạt động với GNU 'readlink' – twe4ked

Các vấn đề liên quan