更改符号链接

时间:2013-04-18 08:04:12

标签: perl symlink

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

实施例: 变化

kat/../kat/link

usr/sth/sth/kat/link

kat/link

如何使用Perl执行此操作?

1 个答案:

答案 0 :(得分: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 test operator来测试$file是否为符号链接。