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 に答える