Tar -xvf remove arquivos existentes do diretório?

10

Eu tenho um arquivo tar e quero usar tar -xvf.
Neste arquivo tar, tenho uma árvore de diretórios contendo alguns arquivos. No meu sistema solaris 10, essa árvore de diretórios já existe e possui vários arquivos.
Se eu descompactar o arquivo, a árvore de diretórios inteira será substituída ou apenas os arquivos contidos no arquivo serão substituídos?
Os arquivos que não possuem um correspondente no arquivo serão excluídos?

Felicia
fonte
Você sempre pode criar um teste .tar e um diretório de teste e testá-lo ... uma resposta que você criar durará muito mais em sua mente do que uma resposta dada por qualquer pessoa aqui.
Jarvin 18/08/10
A resposta é não. Se você pensar o suficiente, perceberá que não faz sentido que um programa para extrair arquivos de um arquivo exclua arquivos completamente não relacionados.
Fosco

Respostas:

6

Arquivos duplicados que já existem podem ou não ser descompactados e substituídos, dependendo do seu sistema. No entanto, geralmente ocorre por padrão. Os arquivos que estão no arquivo morto, mas não no seu sistema, serão simplesmente adicionados aos diretórios novos ou existentes no sistema.

Dir /test

/1/a
c

Arquivo test.tar

/1/b
d

provavelmente será mesclado com:

/1/a
/1/b
c
d

A adição do -ksinalizador ao comando tar garantirá que nenhum dos arquivos no diretório de destino seja substituído:

tar -xvkf test.tar
BloodPhilia
fonte
@BP: A substituição pode ser dependente do shell, pois o csh (ainda padrão no Sun?) Tinha uma variável de shell "noclobber" que, quando configurada, impede o comportamento acidental de substituição.
Hotei
Obrigado BloodPhilia e hotei. Fiz um teste no meu sistema e o tar -xvf substitui os arquivos que já existem e adiciona os que não existem. O que eu gostaria de saber é se existe a possibilidade de um diretório inteiro ser substituído e, assim, perder os arquivos que estavam no meu sistema nesse diretório, mas não estavam no arquivo morto? Por exemplo: Eu tenho em dir.tar dir / file2. No meu sistema, tenho dir / file1, dir / file2 e dir / file3. É possível que, se eu executar tar -xvf dir.tar, o diretório inteiro seja sobrescrito e não contenha mais o arquivo1 e o arquivo3?
Felicia
@hotei: noclobber(que também existe nos shells POSIX) afeta apenas os arquivos redirecionados para >foodentro do shell. Não tem efeito no alcatrão.
Gilles 'SO- stop being evil'
O @hotei noclobber impede que você sobrescreva arquivos através do redirecionamento no shell. Portanto echo foo > bar.txt, não substituirá bar.txt, se existir. Não tem efeito sobre o que um programa, como o tar, substituirá.
KeithB
1
@Felicia: De acordo com o Single Unix, o tar não apagará os arquivos que não estavam no arquivo. Ele substituirá os arquivos existentes pelo conteúdo (mas não pelos modos) do arquivo morto. Pode haver alcatrões não compatíveis, mas duvido que algum deles substitua arquivos não relacionados, como dir/file1.
Gilles 'SO- stop being evil'
0

A maneira mais fácil é criar um diretório novo e vazio, fazer um cd nele e extrair os arquivos lá. Você precisa ter cuidado, porém, que os arquivos extraídos sejam relativos (inicie com ./) e não absolutos (inicie com /). Canalize o sumário com menos para ver qual é o caso, se você não souber (tar -tvf tar_filename | less)

Você pode descobrir se sua versão tar substitui por padrão ou não, olhando para a página de manual. O Tar não excluirá os arquivos durante a extração, o que é outro motivo pelo qual as pessoas geralmente começam em um novo diretório vazio antes de fazer a extração.

hotei
fonte