2013-04-18 6 views
0

가장 짧은 상대 경로를 사용하려면 주어진 디렉토리의 모든 심볼릭 링크를 변경해야합니다.심볼릭 링크 변경

예 : 변화

나는이 사용하는 펄을 할 수있는 방법
kat/link 

kat/../kat/link 

또는

usr/sth/sth/kat/link 

?

+0

펄이 아닙니다. Perl입니다. – Futuregeek

+0

예, 편집을위한 thx : – Kmaczek

+1

당신은 무엇을 시도 했습니까? – devnull

답변

2

당신은 상대하기 위해 제거 후 현재 디렉토리를 abs_path를 사용하여 간단하게 경로를 얻을 수 있습니다 :

use warnings; 
use strict; 
use Cwd qw/getcwd abs_path/; 

my $silly_path = 'foo/../foo/../foo/../foo'; 

my $simplified = abs_path($silly_path); 
my $cwd = getcwd(); 

print "Canonical path: $simplified\n"; 
print "Current directory: $cwd\n"; 

$simplified =~ s|^\Q$cwd/||; #Make relative if within current directory. 

print "Simplified path: $simplified\n"; 

이 링크는 펄의 현재 작업 디렉토리에 있다고 가정합니다. 원하는 경우 다른 디렉토리로 대체 할 수 있습니다. 현재 디렉토리 내의 링크에 대한 상대 경로 또는 현재 디렉토리 외부를 가리키는 단순 경로의 절대 경로가됩니다.

glob을 사용하여 디렉토리의 모든 파일을 가져온 다음 -l $filefile test operator을 사용하여 $file이 심볼 링크인지 테스트 할 수 있습니다.