Como exportar em lote todo o conteúdo contido nos links simbólicos? (e, em seguida, exclua todos eles)

5

Então, como uma alternativa para Scp recursivo sem seguir links ou criar um arquivo tar gigante? (isso pode ser uma emergência, já que os arquivos remotos podem ser apagados em breve), estou pensando em deletar todos os meus links simbólicos. Mas eu gostaria de exportá-los em lote para algum lugar, para que eu possa restaurá-los assim que eu terminar de copiar o arquivo scp.

    
por InquilineKea 09.12.2012 / 23:11

1 resposta

0

Você pode criar um arquivo tar contendo apenas os links simbólicos. Assumindo utilitários GNU (Linux ou Cygwin não embarcados):

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

Outra abordagem é gerar um script de shell que recriará os links simbólicos. Aqui está uma abordagem Perl (enquanto isso é possível com apenas utilitários POSIX, é difícil lidar com caracteres especiais corretamente).

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}, ".")

Não remova os links simbólicos. Exclua-os da cópia ou crie uma cópia sem symlink da árvore de diretórios, conforme ilustrado em minha resposta à sua outra pergunta .

    
por 10.12.2012 / 00:41

Tags