Cygwin criando vários links para arquivos dentro do tar?

3

Estou tentando criar um arquivo .tar no Cygwin:

find . > tmpfilelist
tar -cf tmp.tar -T tmpfilelist

mas quando eu abro tmp.tar no Windows com o 7-Zip existem quatro instâncias de cada arquivo:

Name              Size            Link
.gitignore        62
.gitignore        0               path/to/.gitignore
.gitignore        0               path/to/.gitignore
.gitignore        0               path/to/.gitignore

e quando extraio o tar para sua própria pasta, sou solicitado a sobrescrever cada arquivo três vezes. Além disso, exibir as propriedades da pasta extraída no Explorer mostra um tamanho de 0 bytes.

É possível criar um arquivo .tar no Cygwin que se comportará no Windows? Só para esclarecer, estou usando apenas os arquivos .gitignore como exemplo; o problema parece estar em todos os arquivos.

Editar:

$ tar -tvf tmp.tar | grep -i "link to" | grep -i ".gitignore" | sort | head -n20
hrw-r--r-- user/None        0 2011-07-06 11:27 path/to/.gitignore link to path/to/.gitignore
hrw-r--r-- user/None        0 2011-07-06 11:27 path/to/.gitignore link to path/to/.gitignore
hrw-r--r-- user/None        0 2011-07-06 11:27 path/to/.gitignore link to path/to/.gitignore
hrw-r--r-- user/None        0 2011-09-29 15:40 path/to/other/.gitignore link to path/to/other/.gitignore
hrw-r--r-- user/None        0 2011-09-29 15:40 path/to/other/.gitignore link to path/to/other/.gitignore
hrw-r--r-- user/None        0 2011-09-29 15:40 path/to/other/.gitignore link to path/to/other/.gitignore
...

.

$ grep -i ".gitignore" tmpfilelist | sort | head -n20
path/to/.gitignore
path/to/other/.gitignore
...

O tar do Cygwin está mostrando a mesma listagem, mas o tmpfilelist não parece ter esses links extras. Então eu acho que a verdadeira questão é como fazer um arquivo tar bem formado no Cygwin? Não tenho certeza se eles são relevantes ou como aplicar as opções tar --dereference e --hard-dereference .

Edit: Até onde eu sei, 7z não preserva estruturas de diretórios quando recebe uma lista de arquivos sem especificar uma raiz e não há raiz comum para alguns dos arquivos da minha lista (a lista será eventualmente agregado para várias execuções find ).

    
por wes 10.10.2012 / 17:42

1 resposta

2

Um problema pode ser que find . > tmpfilelist liste arquivos e diretórios.

tar parses tmpfilelist e adiciona qualquer diretório listado ao arquivo tar com seu conteúdo .

tar também adiciona qualquer arquivo listado em tmpfilelist , mas esses arquivos já foram adicionados por tar quando processou os diretórios. O resultado é que os arquivos são incluídos mais de uma vez (eventualmente, muitas vezes, se os arquivos residirem na estrutura do diretório).

Você deve usar:

find . ! -type d > tmpfilelist

para gerar uma lista de objetos do sistema de arquivos, com exceção dos diretórios.

Quanto aos links simbólicos que você menciona, é um mistério para mim como eles acabam sendo parte do arquivo tar.

EDITAR: Os links simbólicos podem já existir. Listá-los com find . -type l .

    
por 10.10.2012 / 22:16