Evitar erros de tar falhando ao restaurar permissões de diretório

12

Observo o seguinte comportamento com o tar 1.26 e o 1.27.1:

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b -xvf test.tar diffowner
diffowner/
diffowner/foo
tar: diffowner: Cannot utime: Operation not permitted
tar: diffowner: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors

Então, o que estou tentando fazer aqui é extrair um arquivo tar em uma estrutura de diretório existente, na qual não sou o proprietário de todos os diretórios envolvidos, mas tenho permissão de gravação em todos eles. Na verdade, eles são compartilhados entre um grupo.

Eu não me importo com carimbos de data e hora, e confio que as permissões já devem estar corretas. Estou executando isso como um usuário normal, portanto, ele não deve estar tentando --preserve-permissions , a menos que seja dito, o que eu não fiz. O que realmente me preocupa é o status de saída: pretendo usar isso em um script e quero saber se a extração real funcionou bem.

Existe uma opção para o tar que diz não para definir permissões de diretório, nem imediatamente nem atrasadas? Na falta disso, que outras soluções você sugeriria. No momento, estou pensando em extrair para um diretório temporário e usar rsync para mover coisas para a árvore existente. Mas talvez você conheça uma abordagem menos agressiva.

    
por MvG 09.01.2014 / 14:36

1 resposta

21

Esta opção tar pode ser o que você está procurando:

 --no-overwrite-dir
       preserve metadata of existing directories

Eu testei da seguinte forma:

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b --no-overwrite-dir -xvf test.tar diffowner
diffowner/
diffowner/foo
$ echo $?
0
    
por 09.01.2014 / 14:53