我需要更改给定目录中的所有符号链接以使用最短的相对路径。
实施例: 变化
kat/../kat/link
或
usr/sth/sth/kat/link
到
kat/link
如何使用Perl执行此操作?
答案 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
是否为符号链接。