it-swarm-pt.tech

Como criar um arquivo Zip compatível com o Windows no Linux

Eu preciso fazer um arquivo Zip disponível para todos os meus visitantes usuários do Windows, então eu ingenuamente produzi um arquivo Zip com o comando Unix Zip (vamos chamá-lo de madeinlinux.Zip).

Ele é aberto com êxito com o WinRar ou o Winzip, mas os dos meus usuários que estão usando a falha de experiência de tratamento de arquivos Zip padrão do Windows ao tentar descompactá-lo. (Windows XP)

Eu comprimi os mesmos dados usando o mecanismo Zip interno do Windows e, do ponto de vista do Linux, não vejo diferença no tipo de arquivo:

$ file madeinlinux.Zip :  Zip archive data, at least v2.0 to extract
$ file madeinwindows.Zip : Zip archive data, at least v2.0 to extract

Eles devem ser algo específico para um arquivo Zip compatível com o Windows.

Alguém sabe o que?

47
user3213

Tente com:

Zip -9 -y -r -q file.Zip folder/
  • -9 Indica a velocidade de compactação mais lenta (compactação ideal, ignora a lista de sufixos)
  • -y Armazena links simbólicos como tal no arquivo Zip, em vez de compactar e armazenar o arquivo referido pelo link
  • -r Percorre a estrutura de diretórios de forma recursiva
  • -q modo silencioso
26
Igor Fobia

7Zip é uma ferramenta de compressão de código aberto que funciona em Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga e Windows.

Eu recomendo com base na versão do windows.

Suporta

embalagem/desembalagem: 7z, Zip, GZIP, BZIP2 e TAR

Desempacotando somente: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR e Z.

11
Bruce McLeod

Zip -Z define a opção de compactação. -Z store é o mais trivial, pois não é comprimido. Isso é útil quando você está usando Zip como uma alternativa para tar ou quando soluciona problemas. Nesse caso, você deve tentar verificar se um arquivo descompactado pode ser usado no Windows. Se isso é utilizável, você sabe que terá que escolher uma opção de compactação não padrão.

8
MSalters

A única coisa que parece relevante é esta

-k - Attempt  to  convert  the  names  and paths to conform to MSDOS, store only the MSDOS attribute (just the user write attribute from UNIX), and mark the entry as made under
MSDOS (even though it was not); for compatibility with PKUNZIP under MSDOS which cannot handle certain names such as those with two dots.

mas leia "man Zip" no seu sistema antes de ir para outro lugar ...

7
Dan Rosenstark

Além do que os outros sugeriram, é importante prestar Atenção aos seus nomes de arquivos e diretórios , pois o Windows não necessariamente gosta do caminho e nomes de arquivos do Linux. Às vezes também escapa-los de forma diferente quando se fecha. Exemplos são numerosos, mas o mais importante arquivos de ponto (. E ..), arquivos com apenas diferenças de casos (name.txt e NAME.txt), caminhos de arquivos absolutos (/tmp/file.txt ) . Alguns outros caracteres que são permitidos em nomes de arquivos no Windows podem causar problemas quando o Windows Explorer é usado para abrir arquivos. No meu caso, ':' personagem foi o disjuntor do negócio, mas teve muito trabalho para descobrir isso.

Então, antes de retomar o uso de muitos parâmetros, sugiro seguir um procedimento simples:

  1. Localize a pasta ou arquivo seu zipping up.

  2. run: Zip -9 -r -k Zip-modified-names.Zip/caminho/para/sua/pasta

  3. preste atenção ao que o console mostra. No meu caso ':' os nomes dos arquivos foram removidos.
  4. Mova o arquivo Zip para uma máquina Windows e tente abri-lo.

Se isso funcionar, talvez seja melhor remover os caracteres que foram removidos pela opção -k dos nomes de arquivos/diretórios que você tentou compactar normalmente. Observe que alguns parâmetros, como -k, têm efeitos colaterais. Nesse caso, -k contradiz com a opção -q (para links sym).

Também a opção -k pode tornar seus nomes de arquivos ilegíveis. No meu caso, meus arquivos foram nomeados com base no tempo de criação (por exemplo, 10: 55: 39.pdf) para facilitar a localização do registro necessário dos arquivos, mas a opção -k o transformou em 105539.pdf, que não é facilmente legível pelos usuários. Eu, portanto, mudei os nomes para 10_55_39.pdf, que abre no Windows sem usar a opção -k, mas ainda é legível.

4
Shakus

Teve um problema semelhante recentemente com arquivos produzidos a partir de um script Perl. Descobriu que o Windows nativo Zip (testado apenas no Windows 7) manipula incorretamente os caminhos com uma barra inicial e exibe um arquivo zip vazio. A solução foi despir a barra antes de adicionar arquivos. Talvez algumas versões do comando linux Zip armazenem caminhos de arquivos com barras principais.

3
Nicholas Hardy

Aqui está um script python que estou usando para zipar alguns arquivos. Foi testado no Ubuntu e no Vista. Um zip gerado no Ubuntu abre com o zíper do Vista.

Acho que tive um problema semelhante no passado e foi porque o formato Zip não era Zip_DEFLATED. Não tenho certeza. Eu vou verificar isso.

Espero que ajude

 import zipfile 
 import glob, os, sys 
 
 classe ZipArquivar: 
 
 def Zip_it (self, dirName, arquivos) : 
 dirNamePrefix = dirName + "/ *" 
 para nome do arquivo em glob.glob (dirNamePrefix): 
 se os.path.isfile (filename) e (não self.exclude_svn ou ( filename.find (". svn \\") == - 1)): 
 print filename 
 nome = nome do arquivo [len (self.folder) +1:] 
 self .archive.write (nome do arquivo, nome, arquivo.zip_DEFLATED) 
 
 def run (self, pasta, nome, exclude_svn): 
 self.exclude_svn = exclude_svn 
 self.folder = pasta 
 self.archive = zipfile.ZipFile (nome + ". Zip", "w") 
 os.path.walk (self.folder, ZipArchive.Zip_it, self) 
 self.archive.close () 
 
 if __== "__main __": 
 if (len (sys.argv) == 1): 
 print "pasta zipit de uso [nome] [svn: sim | não]" 
 else: 
 name = sys.argv [1] 
 exclude_svn = Falso 
 
 if (len (sys.argv)> 2): nome = sys.argv [2] 
 if (len (sys.argv)> 3): exclude_svn = (sys.argv [3] == "não") 
 
 Arch = ZipArchive () 
 Arch. run (sys.argv [1], nome, exclude_svn) 
 print "feito" 
 
1
luc

Provavelmente existe um problema na sua transferência de arquivos do Linux para o Windows. Se você estiver usando o FTP, tente definir uma transferência binária (comando bin no Windows, antes da transferência de seus arquivos do Linux para o Windows).

0
Luis Andrés García