だから代わりにリンクをたどったり、巨大なtarファイルを生成せずに再帰scpを使用しますか?(リモートファイルがすぐに削除される可能性があるため、緊急事態になる可能性があります。)シンボリックリンクをすべて削除することを検討しています。しかし、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
別のアプローチは、シェルスクリプトを生成してシンボリックリンクを再作成することです。これは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}, ".")
シンボリックリンクを削除しないでください。コピーから除外するか、以下のようにディレクトリツリーのシンボリックリンクされていないコピーを作成します。他の質問に対する私の答え。