如何批量导出符号链接中包含的所有内容?(然后全部删除)

Inq*_*Kea 5 symlink ln

那么作为Recursive scp的替代方案,而不需要遵循链接或创建一个巨大的 tar 文件?(这可能是紧急情况,因为远程文件很快就会被删除),我正在考虑删除我所有的符号链接。但是后来我想将它们全部批量导出到某个地方,以便在完成 scp 文件复制后可以恢复它们。

Gil*_*il' 0

您可以制作仅包含符号链接的 tar 存档。假设 GNU 实用程序(非嵌入式 Linux 或 Cygwin):

cd /some/dir
tar cf symlinks.tar --no-recursion .
find -type l -print0 | xargs -0 tar rf symlinks.tar
Run Code Online (Sandbox Code Playgroud)

另一种方法是生成一个 shell 脚本来重新创建符号链接。这是一种 Perl 方法(虽然这仅适用于 POSIX 实用程序,但很难正确处理特殊字符)。

use File::Find;
sub wanted {
    if (-L $_) {
        $link_name = $_;
        $target = readlink($_);
        die $! if !defined $target;
        # protect single quotes from shell expansion
        $link_name =~ s/\x27/\x27\\\x27\x27/;
        $target =~ s/\x27/\x27\\\x27\x27/;
        print "ln -s -- \x27$target\x27 \x27$link_name\x27\n";
    }
}
find({wanted => \&wanted, no_chdir => 1}, ".")
Run Code Online (Sandbox Code Playgroud)

不要删除符号链接。将它们从副本中排除,或者制作目录树的无符号链接副本,如我对您的其他问题的回答所示。