# 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?
# 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?
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);
}
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! –
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)) ;
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
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
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
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
đường dẫn tuyệt đối của tệp mà liên kết tượng trưng trỏ đến – Tree
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. –