所以作为替代方案递归 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}, ".")
不要删除符号链接。将它们从副本中排除,或者制作目录树的无符号链接副本,如下所示我对你另一个问题的回答。