Pergunta

Eu estou usando Perl do Archive :: Tar módulo. Ele preserva as permissões de arquivo, mas não preserva o sticky bit. No outro extremo onde eu extrair o arquivo, todos os bits pegajosas sumiram. Acho UNIX / LINUX sistema operacional armazena esses bits pegajosas em outro lugar. Como posso fazer meu arquivo preservar sticky bits também?

Usando a opção -p para conservas de alcatrão, mas como posso fazê-lo usando Arquivo :: tar ? Eu estou usando o módulo de Perl em ambos os lados.

Foi útil?

Solução

De acordo com o Belas Fonte, Arquivo :: tiras Tar :: File fora os bits altos do modo. Você pode tentar o seguinte encantamento mágico no início do seu script (antes de qualquer coisa pode ter referenciado Archive :: Tar) e ver se que subverte-lo:

use Archive::Tar::Constant ();
BEGIN {
    local $SIG{__WARN__} = sub{};
    *Archive::Tar::Constant::STRIP_MODE = sub(){ sub {shift} };
}
...
use Archive::Tar;
...

Breve explicação: STRIP_MODE é uma constante que contém uma sub-rotina que pode ser passado o modo bruto e retorna o modo que deve ser armazenado. É normalmente definido como

sub { shift() & 0777 }

Porque é uma constante, importado da Archive :: Tar :: constante em Archive :: Tar :: File e usados ??lá, tudo o que ela é definida como vai ser embutido em Archive :: Tar :: File como é compilado . Então, para mudá-lo, a constante deve ser alterado antes de ser embutido, isto é, antes Archive :: Tar :: File nunca fica carregado.

NB. Porque alterar uma constante elegíveis para uso inline é propenso a erros (mudá-lo depois que é tarde demais para ter qualquer efeito), que normalmente gera uma severa advertência de que não pode ser desativado por meio habituais.

Outras dicas

Não tenho certeza, mas sobre o comando oficial tar, você precisa passar -p para fazer isso acontecer

Você pode querer dar uma olhada na Archive :: Tar documentação para os detalhes. A partir de um breve olhar, parece que

$Archive::Tar::CHMOD = 1;

deve fazer o que quiser, embora os pedidos de documentação que a definição acima é o padrão. Pode ser que Archive :: Tar retira os bits de modo de ordem superior, como o sticky bit.

É o arquivo de ambos criados e extraído com Archive :: Tar, ou você está usando o programa tar padrão em uma extremidade ou o outro?

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