0

我需要更改给定目录中的所有符号链接以使用最短的相对路径。

示例:更改

kat/../kat/link

或者

usr/sth/sth/kat/link

进入

kat/link

如何使用 Perl 做到这一点?

4

1 回答 1

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";

这假定链接在 Perl 的当前工作目录中。如果需要,您可以将其替换为另一个目录。它将导致当前目录中的链接的相对路径,或者指向当前目录之外的东西的简化绝对路径。

您可以使用glob获取目录中的所有文件,然后使用-l $file 文件测试运算符测试是否$file是符号链接。

于 2013-04-18T08:25:23.187 回答