Pergunta

Como copio um link simbólico (e não o arquivo para o qual aponta) em um programa PERL, preservando todos os atributos de link simbólico (como proprietário e permissões)?

Foi útil?

Solução

Em Perl, você pode usar o readlink() Função para descobrir o destino de um symlink.

Você também pode usar o lstat() função para ler as permissões do symlink (em oposição a stat() que lerá os detalhes do arquivo apontado pelo symlink).

Na verdade, definir a propriedade no novo symlink não pode ser feita sem ajuda extra, pois Perl não expõe o lchown() Chamada do sistema. Para isso, você pode usar o Perl Lchown Módulo de CPAN.

Assumindo permissões suficientes (NB: código não controlado)

 use Lchown;
 my $old_link = 'path to the symlink';
 my $new_link = 'path to the copy';

 my $dst = readlink($old_link);
 my @stat = lstat($old_link);

 symlink $dst, $new_link;
 lchown $stat[4], $stat[5], $new_link;  # set UID and GID from the lstat() results

Você não precisa se preocupar com as permissões no symlink - elas sempre aparecem como -rwxrwxrwx

Outras dicas

O módulo Arquivo :: cópia :: recursivo cuida disso. Por padrão, ele copiará symblinks e tentará preservar a propriedade.

Dependendo do seu caso de uso em relação a caminhos alvo absolutos versus relativos, hierarquia de dir etc., usando link Para criar um link rígido para o symblink que você deseja copiar também pode ser suficiente. Não são necessários pacotes extras e a criação de links hardings é suportada pelo Perl em muitas plataformas também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top