如何移动相对符号链接?

ana*_*dox 27 unix linux shell perl symlink

我有很多相对符号链接,我想移动到另一个目录.

如何在保留正确路径的同时移动符号链接(具有相对路径的链接)?

Chr*_*lan 31

您可以使用相对路径转换为完整路径readlink -f foo.所以你会做类似的事情:

ln -s $(readlink -f $origlink) $newlink
rm $origlink
Run Code Online (Sandbox Code Playgroud)

编辑:

我注意到你希望保持相对路径.在这种情况下,移动链接后,可以使用symlinks -c将绝对路径转换回相对路径.

  • 您还可以使用`ln`的`-r`选项创建一个相对链接,即`ln -sr"$(readlink -f"$ origlink")""$ newlink"; rm"$ origlink"`. (2认同)

dax*_*xim 8

这是一个perl保留相对路径的解决方案:

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;
}
Run Code Online (Sandbox Code Playgroud)