Mit readlink -f foo
können Sie relative Pfade in vollständige Pfade umwandeln . Sie würden also etwa Folgendes tun:
ln -s $(readlink -f $origlink) $newlink
rm $origlink
BEARBEITEN:
Mir ist aufgefallen, dass Sie die Pfade relativ halten möchten. In diesem Fall können Sie nach dem Verschieben des Links symlinks -c
verwenden um die absoluten Pfade wieder in relative Pfade umzuwandeln.
Dies ist ein perl
Lösung, die relative Pfade beibehält:
use strictures;
use File::Copy qw(mv);
use Getopt::Long qw(GetOptions);
use Path::Class qw(file);
use autodie qw(:all GetOptions mv);
my $target;
GetOptions('target-directory=s' => \$target);
die "$0 -t target_dir symlink1 symlink2 symlink3\n" unless $target && -d $target;
for (@ARGV) {
unless (-l $_) {
warn "$_ is not a symlink\n";
next;
}
my $newlink = file(readlink $_)->relative($target)->stringify;
unlink $_;
symlink $newlink, $_;
mv $_, $target;
}