Links simbólicos e 7zip

18

Estou tentando compactar uma pasta em um arquivo .7z. Esta pasta contém links simbólicos para outras coisas fora da pasta (diretórios e arquivos).

Aparentemente, 7zip apenas arquiva o link em si, o que não é o que eu pretendia. Existe uma maneira de dizer ao 7zip que eu quero que ele arquive o material ao qual vincula, não o link em si? (Ou seja, se houver um nome de link simbólico fooque aponte para C:\stuff\foo, quero que ele inclua o C:\stuff\foodiretório no arquivo no lugar de foo, não um link simbólico de 0 byte.)

Existe alguma solução razoável além de adicionar os arquivos e pastas em questão? Existem cerca de 10.000 arquivos referenciados por links simbólicos, portanto, adicioná-los todos individualmente levaria horas ... Talvez exista um programa que crie uma pasta temporária com os arquivos reais e depois passe para o 7zip. Ou apenas um arquivador que lida melhor com links simbólicos.

Estou executando o Windows Vista. Todos os links são simbólicos (por exemplo, criados com mklink link targete mklink /D link target).

EDITAR:

dir saída de comando para um diretório de teste menor:

C:\...>dir
 Volume in drive C is OS
 Volume Serial Number is 0A3D-CD6E

 Directory of C:\...

09/04/2010  18:12    <DIR>          .
09/04/2010  18:12    <DIR>          ..
09/04/2010  18:10               975 real file.txt
09/04/2010  18:11    <SYMLINK>      test file.txt [..\test file.txt]
               2 File(s)            975 bytes
               4 Dir(s)   5,214,355,456 bytes free

A criação de um arquivo 7z com o 7zip resulta na real file.txtinclusão, mas test file.txté adicionado como um arquivo de 0 byte, embora o arquivo vinculado a ele exista e seja de 50 KB.

Fire Lancer
fonte
Qual sistema operacional você está usando?
Charles Gargent
2
Doesnt a tag "windows" sugerem que im usando, assim janelas ...
Fogo Lancer
1
Ok, qual versão do Windows você está usando?
precisa saber é o seguinte
@ Fire Lancer: Geralmente, é uma boa idéia repetir qualquer informação das tags no texto. Mais fácil de ler, e nem todo mundo olha para as tags (como estão na parte inferior). Além disso, as tags podem estar sujeitas a mal-entendidos. Por exemplo, eu posso estar no Linux, mas quero interoperar com o Windows, então marquei minha pergunta como "windows".
sleske
1
Bem, parece que os arquivos 7z <SYMLINKD> e <JUNCTION> diretórios, mas não <SYMLINK> arquivos, então eu acho que se você pode esgueirar-se todos os seus arquivos em um diretório e ligação simbólica que ele iria trabalhar
hova

Respostas:

13

Aparentemente, 7zip apenas arquiva o link em si, o que não é o que eu pretendia. Existe uma maneira de dizer ao 7zip que eu quero que ele arquive também as coisas que ele vincula, não o link em si

Não, aparentemente não (infelizmente). Na verdade, existe um relatório de bug no 7zip solicitando o seguinte: http://sourceforge.net/tracker/?func=detail&aid=2846755&group_id=14481&atid=114481, mas foi aberto em agosto de 2009 e não foi tocado desde: - /.

Na falta de algum motivo, além de adicionar os arquivos e pastas em questão? Incluindo o material através do link simbólico, existem 10.000 arquivos, a grande proporção dos quais é via links simbólicos, portanto, a adição de todos eles individualmente levaria horas ...

Bem, se você tiver espaço (e tempo) suficiente, poderá fazer uma cópia da pasta, substituindo os links simbólicos por seus destinos. Você pode, por exemplo, usar Robocopy e seu switch /sl:

/ sl Copia o link simbólico em vez do destino


Nota: Só para evitar confusão, nota que a compilação Linux de p7zip (uma porta de 7zip) também tem um binário 7zque faz suporte arquivar o arquivo de um link simbólico aponta (interruptor -l). No entanto, o 7zip no Windows não possui essa opção.

sleske
fonte
Como esta é a resposta aprovada, queira apontar que o 7zip real faz isso pelo -lswitcher. zip e gzip também fazem com seus comandos específicos.
M3nda
@ erm3nda onde você vê essa opção? Por favor, forneça a referência.
marca de
linux.die.net/man/1/7z Existe uma opção l, e há também uma opção com a mesma letra. Notei que esta opção não está presente na versão do Windows para o software.
M3nda
@ erm3nda: Sim, mas é o p7zip, uma porta do 7zip. Obrigado por apontar isso; Eu atualizei minha resposta.
Sleske #
Obrigada tambem Não posso acreditar que o Windows está sem esse recurso. Mesmo que os links simbólicos no Windows sejam bastante diferentes, não descubra por que é difícil fazê-lo funcionar.
M3nda
-1

Se você estiver usando o Vista e superior, remova os links simbólicos e substitua-os por mklinks

mklink /D Directory FullPathToRealDirectory

Observe que o mklink é bastante poderoso e pode incluir links para compartilhamentos de rede e similares.

Como parece haver alguma confusão sobre isso, deixe-me esclarecer. Suponho que o OP esteja realmente falando sobre junções, como ilustrado aqui http://en.wikipedia.org/wiki/NTFS_junction_point . O Mklink não faz junções . Faz TRUE links simbólicos e eu tentei por mim mesmo e o 7zip os respeita perfeitamente. Além disso, você precisa ser administrador para criar links simbólicos do mklink.

 Directory of C:\temp\t

04/08/2010  04:50 PM    <DIR>          .
04/08/2010  04:50 PM    <DIR>          ..
04/08/2010  04:31 PM    <SYMLINKD>     GB [c:\users\testuser]    <-- created by mklink
04/08/2010  04:50 PM    <JUNCTION>     GB2 [\??\c:\users\testuser] <-- created by junction
04/08/2010  04:29 PM                 8 test.txt

O 7zip arquivará GB, mas NÃO arquivará GB2. EDIT: Na verdade, testes adicionais mostram que o 7zip arquivará os dois diretórios usando a versão 4.65. Portanto, não tenho idéia de qual é o problema.

hova
fonte
1
Dado que todos os links simbólicos originais foram criados com as APIs da Microsoft e o mklik em primeiro lugar, o que isso resolve além de refazer a mesma coisa?
Fogo Lancer
2
-1 Como isso resolve o problema? Você acabou de descrever como criar links simbólicos.
fácil
@hova: Sim, isso é verdade (embora o MS normalmente chame os links simbólicos de "links simbólicos"; junções nunca são chamadas de "links simbólicos"). Mas como isso se relaciona com a questão?
sleske
7zip arquiva diretórios SYMLINKD (mklink)!
quer
1
Acabei de fazer alguns testes com o 7zip v15.14 (64 bits) no Windows 7, e parece que o 7zip agora segue links simbólicos de diretório, mas armazena apenas um arquivo vazio para links simbólicos de arquivo - o que não é muito útil.
Bigue Nique