我需要更改给定目录中的所有符号链接以使用最短的相对路径。
示例:更改
kat/../kat/link
或者
usr/sth/sth/kat/link
进入
kat/link
如何使用 Perl 做到这一点?
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";
这假定链接在 Perl 的当前工作目录中。如果需要,您可以将其替换为另一个目录。它将导致当前目录中的链接的相对路径,或者指向当前目录之外的东西的简化绝对路径。