심볼릭 링크의 모든 것을 일괄 내보내는 방법은 무엇입니까? (그런 다음 모두 삭제)

심볼릭 링크의 모든 것을 일괄 내보내는 방법은 무엇입니까? (그런 다음 모두 삭제)

그래서 대안으로링크를 따르거나 거대한 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}, ".")

심볼릭 링크를 삭제하지 마세요. 복사본에서 제외하거나 아래와 같이 디렉터리 트리의 심볼릭 링크되지 않은 복사본을 만듭니다.다른 질문에 대한 내 대답.

관련 정보