O que eu preciso para extrair e combinar arquivos de texto de vários arquivos ZIP, via linha de comando?

1

Eu tenho um desafio de script interessante na minha frente. Tenho certeza de que há uma maneira de fazer isso, mas sinto que provavelmente não tenho algumas ferramentas específicas e / ou conhecimento funcional.

Existem mais de cinquenta arquivos ZIP, cada um contendo, entre outras coisas, arquivos de texto que precisam ser mesclados uns com os outros. A estrutura é algo assim:

C:\Reports\FirstJob-1.zip  
|-MyName  
  |-FirstJob
    |-1
      |-[Some other folders]
      |-TXTReports
        |-English
          |-[Some other files]
          |-Report.txt  

C:\Reports\FirstJob-2.zip  
|-MyName  
  |-FirstJob
    |-1
      |-[Some other folders]
      |-TXTReports
        |-English
          |-[Some other files]
          |-Report.txt 

C:\Reports\SecondJob-1.zip  
|-MyName  
  |-SecondJob
    |-1
      |-[Some other folders]
      |-TXTReports
        |-English
          |-[Some other files]
          |-Report.txt

Se eu tivesse todos os arquivos Report.txt em uma pasta regular e tivesse um nome exclusivo, provavelmente poderia escrever uma instrução FOR que segmentasse *.txt e executasse algo como type filename.txt >> Consolidated.txt em cada. No entanto, todos eles têm o mesmo nome de arquivo e são incorporados em arquivos ZIP separados.

As ferramentas potencialmente úteis que tenho atualmente à minha disposição são o Windows XP Professional SP3, o PowerShell e o WinZip. Eu prefiro não baixar ou instalar qualquer outra coisa, mas eu entendo que ferramentas de terceiros (ou ferramentas adicionais da Microsoft ou WinZip) podem ser necessárias. Quaisquer ferramentas que eu use devem rodar nativamente no Windows. Eu realmente não quero ter que mexer com o Cygwin ou outros emuladores neste sistema.

No mínimo, eu preciso de uma ferramenta que me permita analisar e manipular arquivos ZIP a partir da linha de comando. Além disso, existem outras complicações particulares que eu ainda não tenha pensado?

    
por Iszi 24.02.2012 / 20:59

2 respostas

1

Unzip do Info-ZIP (binários do Windows aqui ) permite extrair arquivos zip da linha de comando com unzip -x . O resto é uma questão de encontrar e concatenar os arquivos, por exemplo:

find . -name Report.txt -print0 | xargs -0 cat > Consolidated.txt

Os comandos acima são Unix, que você pode encontrar em Cygwin ou GnuWin32 .

Possíveis implicações são: se você tiver muitos arquivos, o comando xargs ficará muito longo e, se os arquivos forem muito grandes, você poderá ficar sem espaço em disco (pode solucionar isso descompactando e concatenando os arquivos um por um, excluindo a pasta de arquivo descompactada após cada arquivo).

    
por 24.02.2012 / 21:15
1

Posso sugerir outra opção? Se você estiver usando o Windows XP, também terá o VBScript à sua disposição. Vários anos atrás eu escrevi uma série de artigos que demonstraram como o VBScript no WSH pode ser aproveitado para criar e manipular arquivos zip usando o suporte interno do Windows XP para Pastas Compactadas. Você deveria dar uma chance. Seu script não teria dependências de terceiros e o script da lógica do sistema de arquivos é bastante simples.

Pastas compactadas no WSH

Entendendo a classe CompressedFolder

Implementando a classe CompressedFolder

O problema é que os arquivos zip podem ser abertos como pastas compactadas usando o método Namespace do objeto Shell. Isso é essencialmente o mesmo que explorá-los como um diretório com o Windows Explorer.

    
por 05.04.2012 / 07:06