Mais

Como descompactar e recompactar corretamente um arquivo msd usando 7zip na linha de comando


Estou tentando descompactar e recompactar os arquivos msd e sd para ajustar algumas coisas que desejo. Na verdade, eu quero entrar na pasta de camadas e para cada arquivo layer.xml substituir a string o nome do dbconnection. Meu objetivo é criar, com um arquivo bat, 5 arquivos sd gerados a partir de um arquivo sd original - para 5 usuários que estão conectados ao mesmo banco de dados oracle xe, com a mesma senha. Parece ambicioso, mas funciona. Eu tentei mudar os nomes do banco de dados manualmente, entrando nos pacotes sd e msd, usando 7zip seguindo um método descrito por @ericchiasson aqui. No mesmo artigo, @ jpmc26 afirma que você pode recompactar e descompactar o sd, mas deve seguir as propriedades de compressão específicas. @ jpmc26 diz:

A propósito, você pode recompactar um arquivo sd. Você deve usar as opções de compactação corretas. As opções que funcionam para mim são Formato: 7z, Tamanho da palavra: 16, Tamanho do bloco sólido: Não sólido. Também defini o tamanho do dicionário como 64 KB, mas não acho que isso importe. Todas as outras opções foram deixadas com seus padrões. (Fiz algumas suposições baseadas no fato de o 7-zip relatar o método de compactação como "LZMA: 16" para um arquivo sd.) - jpmc26 18 de junho em

Segui suas instruções e usei 7z da linha de comando assim: 7za a -t7z -m0 = lzma -md = 64k -ms = off% MAP_NAME_MXD% .7z No entanto, essas propriedades funcionam para compactar o arquivo sd. Dentro do .sd, há um arquivo compactado do tipo .msd. Tento compactá-lo com a mesma configuração, depois de descompactá-lo para ajustar os arquivos .xml dentro dele.

Quando tento publicar meu sd gerado, ele é publicado corretamente, mas falha ao iniciar. Tentei substituir pelo msd original o msd gerado dentro do meu sd recém-gerado, e ambos os serviços de publicação e inicialização funcionaram. Isso me fez pensar que o método de compactar o pacote msd é o problemático.

Alguém pode me dizer quais são as opções de compactação corretas para os arquivos msd? Uma alternativa seria evitar a descompactação e a recompressão injetando de alguma forma os arquivos xml da camada ajustada dentro do msd. Mas não sei se isso é possivel


Em 2013, isso não era possível. A Microsoft não forneceu nenhum executável para isso.

Do Windows 8 em diante, o .NET Framework 4.5 é instalado por padrão, com System.IO.Compression.ZipArchive e PowerShell disponíveis, é possível escrever scripts para fazer isso, consulte https://stackoverflow.com/a/26843122/71312

Para expandir a solução PowerShell de Steven Penny, você pode incorporá-lo a um arquivo em lote chamando o powershell.exe desta forma:

Como Ivan Shilo disse, isso não funciona com o PowerShell 2, requer PowerShell 3 ou superior e .NET Framework 4.

Se você tiver o Java instalado, pode compactar em um arquivo ZIP usando o comando jar:

c = Cria um novo arquivo compactado.

M = Especifica que um arquivo de manifesto não deve ser adicionado ao arquivo.

f = Indica o nome do arquivo de destino.

PowerShell 5.0

Crie result.zip a partir de toda a pasta Test:

Extraia o conteúdo de result.zip na pasta de teste especificada:

Não é exatamente um ZIP, mas a única maneira de compactar um arquivo usando as ferramentas do Windows é:

Exemplo avançado (de ss64.com):

Fecho eclair: você tem uma pasta foo e deseja compactá-la em myzip.zip

Descompactar: você deseja descompactá-lo (myzip.zip) para o diretório atual (./)

100 máquinas em produção que não possuem 7zip. Para instalar isso, eu teria que fazer o DevOps instalá-lo em todas as máquinas e em todas as novas máquinas que serão adicionadas aos clusters. Eu prefiro evitar. & ndash Roee Gavirel, 9 de maio de 16 às 5:27

Tenho procurado responder a essa pergunta exata e, de acordo com minha pesquisa, a resposta de DiryBoy parece ser precisa.

Descobri que o programa compact.exe compacta arquivos, mas não para criar um arquivo altamente compactado (ou conjunto de arquivos). É semelhante à opção que você obtém ao clicar com o botão direito do mouse em uma letra de unidade ou partição no Windows. Você tem a opção de fazer limpeza (remover arquivos temporários, etc), bem como compactar arquivos. Os arquivos compactados ainda podem ser acessados, mas apenas compactados para criar espaço em uma unidade com pouco espaço.

Também encontrei o compress.exe, que por acaso tinha no meu computador. Não é nativamente na maioria das máquinas Windows e faz parte do kit de recursos de 2003. Ele faz uma espécie de arquivo compactado, mas é realmente mais semelhante aos arquivos de um disco de instalação do Windows (tem o sublinhado como o último caractere da extensão ou nome do arquivo). E o comando extract.exe extrai esses arquivos.

No entanto, o mantra é, se isso pode ser feito nativamente por meio da GUI, então provavelmente há uma maneira de fazê-lo por meio de lote, .vbs ou algum outro tipo de script na linha de comando. Como o Windows tem a opção 'enviar para' para criar um arquivo zip, eu sabia que deveria haver uma maneira de fazer isso via linha de comando e encontrei algumas opções.

Aqui está um ótimo link que mostra como compactar um arquivo usando comandos nativos do Windows.

Eu testei com um diretório contendo vários arquivos e pastas aninhados e funcionou perfeitamente. Basta seguir o formato da linha de comando.

Também existe uma maneira de descompactar os arquivos via linha de comando, que também encontrei. De uma forma, basta abrir uma janela do explorador mostrando qual é o conteúdo do arquivo compactado. Alguns deles também usam Java, que não é necessariamente nativo do Windows, mas é tão comum que quase parece.


O uso de descompactar sem os argumentos e irá, por padrão, extrair arquivos e preservar a estrutura do diretório e o registro de data e hora.

Você pode usar o argumento -l para obter uma lista que mostrará a data e hora dos arquivos. O conteúdo extraído corresponderá ao que você vê na lista.

Se você vir algo diferente com o arquivo zip que está tentando abrir, pode nos mostrar a saída da lista "-l", bem como uma lista ls -l do diretório extraído?

As subpastas retêm o carimbo de data / hora do arquivo zip. No entanto, se a pasta estiver no nível superior, ela perderá o carimbo de data / hora original e assumirá o carimbo de data / hora de quando foi extraída.

Isto é um exemplo. O arquivo Ortho4XP.zip é um arquivo zip que contém mais de 300 arquivos e subdiretórios. Hoje é 7 de agosto de 2017. Como você pode ver na saída, os diretórios de nível superior assumirão a data em que o arquivo foi descompactado. No entanto, como você pode ver na saída, os outros arquivos e subdiretórios retêm o carimbo de data / hora de quando os arquivos foram compactados.

Ainda estou estudando para descobrir qual é a diferença entre as pastas que não estão retendo o carimbo de data / hora do arquivo e as que estão. Atualizarei a resposta para ser mais definitiva em breve. Pode depender da opção usada na criação do arquivo zip.


O problema é que a maioria dos ZIPs que circulam no Japão tem seu conteúdo codificado como Shift JIS, que não é mostrado corretamente por padrão no Ubuntu.

A solução é usar a opção -O shift-jis em seu comando:

Desta forma, os arquivos expandidos são perfeitamente legíveis no Ubuntu.

unar pode reconhecer automaticamente qual codificação é usada. Ele só extrai e não para compactar.

Em seguida, use 'convmv' para codificar o texto após a extração.

Vice-versa, se desejar criar arquivo (s) de utf8 em texto shift_jis para janelas.

Respostas alternativas, uso da equipe do Ubuntu japonês construiu codificação automática 'descompactar'mas você tem que adicionar repositório.


Instale o 7zip do Ubuntu Software Center.

Solução de linha de comando:

No terminal, faça cd para o diretório que contém os volumes e execute o comando 7z no primeiro arquivo da sequência:

7zip deve notar que você tem um arquivo de vários volumes e descompactar tudo. Se você quiser que a estrutura de diretórios seja nivelada, use 7z e em vez de 7z x.

Solução GUI

Clique com o botão direito no primeiro pacote daqueles que você baixou (por exemplo, arquivo.zip.001).

Usar o 7zip para extrair o arquivo iso é extremamente simples, mesmo que tenha várias partes. Vamos supor que você tenha um arquivo iso com três partes nomeadas por a.iso.001, a.iso.002, a.iso.003.

A linha de comando padrão é desta forma:

Passando no -t bandeira com o "dividir" indicação dirá especificamente ao 7z que o iso tem várias partes, o anterior "iso" ou "udf" dependerá do formato do seu contêiner iso.


8 Respostas 8

Parece que os nomes dos arquivos estão codificados em uma das páginas de código proprietárias do Windows (CP862, 1255, etc).

Existe outro utilitário de descompactação que descompacte meus arquivos com os nomes corretos? Não conheço um utilitário zip que ofereça suporte nativo a essas páginas de código. 7z tem algum conhecimento de codificações, mas acredito que deve ser uma codificação que seu sistema conhece de forma mais geral (você a escolhe definindo a variável de ambiente LANG) e as páginas de código do Windows provavelmente não estão entre elas.

unzip -UU deve funcionar na linha de comando para criar arquivos com os bytes corretos em seus nomes (desativando todo o suporte Unicode). Este é provavelmente o efeito que você já obteve com a ferramenta GNOME. A codificação não estará correta de qualquer maneira, mas podemos consertar isso abaixo.

Há algo errado com a forma como o arquivo foi compactado ou é apenas uma incompatibilidade de implementações de ZIP? Ou mesmo falta de funcionalidade / bug dos utilitários ZIP do Linux? O arquivo que você recebeu não foi criado para portabilidade. Isso não é necessariamente errado para um uso interno onde a codificação é fixa e conhecida com antecedência, embora a especificação do formato diga que os nomes devem ser UTF-8 ou cp437 e os seus não são. Mesmo entre máquinas Windows, usar diferentes páginas de código não funciona bem, mas as máquinas não Windows não têm nenhum conceito dessas páginas de código para começar. A maioria das ferramentas UTF-8 codifica seus nomes de arquivo (o que ainda nem sempre é suficiente para evitar problemas).

O que posso fazer para obter os nomes de arquivo corretos depois de descompactar usando os ilegíveis? Se você puder identificar a codificação dos nomes de arquivo, poderá converter os bytes nos nomes existentes em UTF-8 e mover os arquivos existentes para o nome correto. A ferramenta convmv essencialmente agrupa esse processo em um único comando: convmv -f cp862 -t utf8 -r. tentará converter tudo dentro. de cp862 a UTF-8.

Alternativamente, você pode usar iconv e find para mover tudo para seus nomes corretos. Algo como:

encontrará todos os arquivos sob o diretório atual e tentará converter os nomes em UTF-8.

Em qualquer caso, você pode experimentar diferentes codificações e tentar encontrar uma que faça sentido.

Depois de corrigir a codificação para você, se quiser enviar esses arquivos de volta na outra direção, é possível que tenha o mesmo problema do outro lado. Nesse caso, você pode reverter o processo antes de compactar os arquivos com -UU, pois é provável que seja muito difícil consertar no Windows.


Como descompactar e recompactar corretamente um arquivo msd usando 7zip da linha de comando - Sistemas de Informação Geográfica

Como posso criar e extrair arquivos zip da linha de comando?

@joachim, você deve fazer a pergunta em uma pergunta e fornecer uma resposta em uma resposta. Não há nenhum problema em responder às suas próprias perguntas, mas não como parte da pergunta em si, uma vez que isso quebra toda a vantagem dos votos da comunidade na melhor resposta do SO. Além disso, provavelmente é mais adequado para superusuário, pois não está relacionado à programação.

Onde você documentará como ficar online e verificará o ASSIM se você esquecer seu login?

@ rlb.usa: Eu trabalho em muitos lugares diferentes, em muitos servidores diferentes. Usar SA para uma nota como essa também ajuda outras pessoas, a meu ver.

Normalmente, usa-se tar para criar um arquivo descompactado e gzip ou bzip2 para compactar esse arquivo. Os comandos gunzip e bunzip2 correspondentes podem ser usados ​​para descompactar o referido arquivo, ou você pode apenas usar sinalizadores no comando tar para realizar a descompactação.

Se você está se referindo especificamente ao formato de arquivo Zip, pode simplesmente usar os comandos zip e unzip.

isso o descompacta em seu diretório de trabalho atual.

Eu pessoalmente sempre uso os arquivos `zip -r9 archive.zip. `sintaxe (-r = recursivo -9 = compressão máxima).

Apenas como uma observação lateral: `zip` pode criar muitos sabores diferentes de arquivos .ZIP, bem como usar muitos compressores diferentes. Por outro lado, existem várias outras ferramentas de compactação com nomes semelhantes: 7-Zip, gzip, bzip2, rzip, etc. que não são intercambiáveis.

Caso você não queira que o diretório pai seja incluído: `cd dir1 zip -r ../squash.zip *`

Estou confuso, fiz isso e recebo uma longa lista de inflações e extrações, mas quando eu verifico o diretório, ele está vazio. Salvar para o arquivo zip original? Para onde vai tudo isso?

Omg, em seu diretório de trabalho atual! Achei que isso significava o diretório em que ele está, não o diretório em que você fez o `cd`. OOPS!

Para registro, use `unzip -d myfolder squash.zip` para extrair em um novo diretório separado (` myfolder`) em vez de colocar todos os arquivos diretamente no diretório atual, o que pode ser irritante se o arquivo zip contiver muitos arquivos e diretórios em seu nível superior. Isso imita como a maioria das ferramentas de descompactação da IU funcionam.

Há um verdadeiro grande várias maneiras diferentes de compactar e descompactar nos derivados do UNIX, então vou supor que você quis dizer "zip" no sentido genérico em vez de específico formato de arquivo.

Você pode compactar os arquivos (em formato compactado) com o programa GNU tar:

que fará o diretório atual. Substituir . com outros nomes de arquivo, se quiser outra coisa.

Isso presumindo, é claro, que você tenha um tar capaz de compactar e combinar os arquivos em um.

Caso contrário, você pode apenas usar tar cvf seguido de gzip (novamente, se disponível) para compactação e gunzip seguido de tar xvf.

Para tratamento específico de arquivos em formato ZIP, eu recomendaria baixar 7zip e usá-lo - ele reconhece um enorme variedade de formatos de arquivo, incluindo o ZIP.

Ou use `tar jcvf file.tar.bz2. `para compactar no formato bzip2 ou` tar Jcvf file.tar.xz. `para compressão xz.

Eu votei contra sua resposta porque a questão é sobre como lidar com arquivos zip e não com arquivos tar.

@Starfish, isso certamente está dentro dos seus direitos, obrigado por pelo menos explicar o porquê, tantas pessoas não reservam tempo para fazer isso :-) Eu peguei "zip" no sentido mais genérico (compressão) ao invés de um formato específico, então vou deixar isso mais claro.

Esteja ciente de que os arquivos tar podem não funcionar corretamente ao mover entre plataformas diferentes, mac para linux ou vice-versa. O Zip é muito mais seguro, pois funciona corretamente em todos os sistemas.

Suponho que tecnicamente seja gzip, então tudo bem. Eu acho. Obviamente, não é o que a pergunta pedia.

Se você não tiver os pacotes compactar e descompactar instalados e tiver java, pode usar jar para descompactar:

Não é meu servidor, sem descompactar, zip, 7z, nada. E isso funcionou. Obrigado!

Bem, quando se trata de distribuir arquivos para uma variedade de sistemas operacionais, eu recomendo o 7-zip.

Normalmente, no pacote p7zip, você obterá os comandos 7z e 7za, com os quais poderá criar seus próprios arquivos 7z.

O 7za também pode descompactar arquivos zip padrão (pkzip) (e também criá-los com a opção -tzip).

Ele também pode criar arquivos de extração automática com a opção -sfx:

Eu recomendo este método caso os usuários do Windows não consigam abrir arquivos 7z (caso você queira aconselhar uma ferramenta para isso: PeaZip).

Se você quiser usar o mesmo algoritmo de compactação com seus tarballs, use a opção -J com tar:

xz é uma ferramenta UNIX, que usa LZMA2 para compressão, mas funciona da mesma forma que gz, bz2, etc. Ele até funciona como um filtro.

7z não cria arquivos com informações completas do sistema de arquivos no UNIX, então você precisa usar o tar antes de usar o 7z (mas como o 7z armazena outras informações sobre o arquivo tar, recomendo usar o xz, pois foi projetado para isso) :

Talvez eu deva anexar esta resposta com `atool`, é uma pequena ferramenta agradável que torna o uso de muitos compressores diferentes mais confortável. Vincule-o a `a` e criar um arquivo torna-se` uma pasta arc.7z / `ou extrair um simples` a arc.7z`

Você precisará certificar-se de que esses comandos sejam instalados por meio de seu gerenciador de pacotes. Não é mais difícil do que usar qualquer outra coisa na linha de comando. Certamente é mais simples do que criar arquivos com tar.

Eu sei que este é um tópico antigo, mas esta é a melhor resposta. Não fala sobre 7z ou tar, é conciso e direto ao ponto


Como usar o ZIP Extractor

  1. Para começar, selecione um arquivo ZIP para abrir no Gmail, Google Drive ou no seu computador. Você também pode usar arrastar e soltar.
  2. Uma vez exibido, clique em qualquer arquivo individual dentro do ZIP para visualizá-lo ou baixá-lo.
  3. Pressione o botão "Extrair" para extrair os arquivos selecionados para o Google Drive.
  4. Uma nova pasta será criada no Google Drive para os arquivos descompactados que terminam com "(Arquivos descompactados)".
  5. Após a extração, clique em "Exibir arquivos" para acessar os arquivos descompactados no Google Drive.

Seu problema é que você está usando -v para criar um arquivo de vários volumes. As pessoas têm solicitado ao autor nos últimos 5 anos para permitir que o programa modifique arquivos de vários volumes, mas ele não tem planos de implementar o recurso tão cedo. (É código aberto, gostaria que algum programador empreendedor já o fizesse!)

Tente usar 7za.exe u em vez de 7za.exe a. O primeiro é usado especificamente para atualizar um arquivo que já existe.

Atualmente, não há como ter essa funcionalidade com opções de linha de comando. A substituição é suportada apenas durante a extração do arquivo.


7 Respostas 7

você não vai gostar, mas: descompactar tudo em uma pasta de trabalho na ordem certa e, em seguida, compactar o resultado é a maneira mais eficaz.

caso contrário, você acabará com muitos ciclos de CPU desperdiçados:

  • suponha que seu resultado vá para 'first.zip'
  • cada arquivo de '2.zip', '3.zip' etc deve ser descompactado e compactado novamente em 'first.zip'
  • em '2.zip' existe um arquivo 'foobar.txt' e em '3.zip' existe outro arquivo 'foobar.txt'. mesclá-lo da maneira que você deseja mesclar leva a 'compactá-lo X vezes'
  • o toc de um .zip está no final do arquivo: você adiciona mais conteúdo (no meio do
    .zip atualizando um arquivo no meio) e todo o arquivo deve ser reescrito

então, imho apenas use 'descompactar' o wiseley:

a ordem de descompactação é importante, não sei o padrão de seus nomes de zip, mas gostaria de extrair o arquivo zip mais recente primeiro, a opção '-u' de descompactar sobrescreve apenas os arquivos se forem mais novos ou cria arquivos se não já está lá. como resultado, você descompactará apenas os arquivos mais recentes e compactará o resultado apenas uma vez.

Pode não ser o que você está procurando, mas a ferramenta gratuita de construção Ant inclui a capacidade de mesclar arquivos Zip.

Basta usar a opção -g do ZIP, onde você pode anexar qualquer número de arquivos ZIP em um (sem extrair os antigos). Isso vai economizar um tempo significativo.

O zipmerge mescla os arquivos zip de origem source-zip no arquivo zip de destino target-zip. Por padrão, os arquivos nos arquivos zip de origem sobrescrevem os arquivos existentes com o mesmo nome no arquivo zip de destino.

Eu estava pensando que você poderia fazer o script dos arquivos que estão sendo extraídos para um diretório temporário.

Há um problema com esta linha de comando. Não consegui encontrar uma maneira de ordenar a descompactação dos arquivos, portanto, um arquivo mais antigo pode substituir um arquivo mais recente. Esse problema pode ser superado usando um descompactador que possui uma opção de linha de comando para sobrescrever apenas se for mais recente. Eu uso principalmente o 7-Zip, que não tem essa opção de linha de comando.

Além disso, esse comando precisa que todos os arquivos zip estejam no mesmo diretório. Não é um problema se todos os zips tiverem nomes exclusivos. Dito isso, o comando pode ser alterado para se adequar à sua situação.

para / f% f in ('dir / b * .zip') faça "c: arquivos de programas 7-zip 7z" x% f -oc: testdir -r -aoa

Para mudar isso para usar outro programa de descompactação, basta substituir "c: arquivos de programas 7-zip 7z" x% f -oc: testdir -r -aoa por qualquer comando que você executaria em cada arquivo. Use% f como espaço reservado para o nome do arquivo que deseja descompactar.

Tentei procurar um aplicativo sofisticado, gratuito ou não, e não encontrei nenhum.

Esperamos que isso lhe dê um bom começo e o WinZip ou algo semelhante possa cuidar do problema de substituição.

Se eu me lembro bem, pkzip era um programa de linha de comando.

Ainda existe uma versão de linha de comando do ZIP que afirma ser compatível com o pkzip.

É chamado de Info-ZIP e deve haver uma versão para o seu sistema operacional.

Procure a linha de comando winzip na rede. O Winzip tem várias versões de ferramentas de linha de comando para caber em qualquer versão do winzip que você possa ter instalado. A ferramenta de linha de comando WZZIP tem uma opção -f "refrescar" que compactará os arquivos mais recentes apenas aqueles que correspondem ao nome de um arquivo no arquivo compactado de saída de soma.

Use WZunzip envolto em uma instrução FOR conforme mostrado acima para descompactar um arquivo em um diretório e depois WZzip -f para adicionar esses arquivos a um arquivo zip de soma de saída. Em seguida, o loop FOR se repete para trabalhar no próximo arquivo de entrada para dar saída ao único arquivo de saída de soma. A ordem dos arquivos de entrada não importa, pois WZzip -f só será adicionado ao arquivo de saída se os dados de entrada forem mais novos do que o que já está no arquivo de saída. Todos os arquivos que não existem no arquivo de saída também serão adicionados. Em seguida, você pode descompactar o resultado para uma pasta e compactá-lo novamente para obter um arquivo de resultado compactado de forma eficiente. Você pode até fazer isso automaticamente após o loop FOR no final do arquivo em lote.


Assista o vídeo: Compactador de arquivos gratis aprenda descompactar e compactar arquivos com o 7zip (Outubro 2021).