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

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

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

答案1

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

cd /some/dir
tar cf symlinks.tar --no-recursion .
find -type l -print0 | xargs -0 tar rf symlinks.tar

另一种方法是生成一个 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}, ".")

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

相关内容