最短の相対パスを使用するように、特定のディレクトリ内のすべてのシンボリック リンクを変更する必要があります。
例: 変更
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 の現在の作業ディレクトリにあることを前提としています。必要に応じて、それを別のディレクトリに置き換えることができます。現在のディレクトリ内のリンクの相対パス、または現在のディレクトリの外部を指すものの単純化された絶対パスになります。
globを使用してディレクトリ内のすべてのファイルを取得し、-l $file
ファイル テスト演算子を使用し$file
てシンボリック リンクかどうかをテストできます。