那么作为Recursive scp的替代方案,而不需要遵循链接或创建一个巨大的 tar 文件?(这可能是紧急情况,因为远程文件很快就会被删除),我正在考虑删除我所有的符号链接。但是后来我想将它们全部批量导出到某个地方,以便在完成 scp 文件复制后可以恢复它们。
您可以制作仅包含符号链接的 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)
不要删除符号链接。将它们从副本中排除,或者制作目录树的无符号链接副本,如我对您的其他问题的回答所示。