Extrai um arquivo de vários arquivos zip

1

Eu tenho uma árvore de pastas que contém várias pastas .zip (aproximadamente 600) cada uma contendo quatro arquivos. Desejo extrair apenas um arquivo de cada pasta e copiá-lo para uma pasta separada. Para complicar as coisas, o arquivo tem o mesmo nome em cada pasta.Existe um script que eu possa executar para fazer isso? Qualquer ajuda apreciada.

    
por Phil 18.08.2015 / 11:13

2 respostas

2

Você pode tentar o seguinte:

mkdir -p "DESTDIR"
for i in *.zip ; do
         unzip "$i" "THEFILE" -d "DESTDIR"
         mv "DESTDIR/THEFILE" "DESTDIR/$(basename "$i" .zip)_THEFILE"
done

Substitua DESTDIR pelo caminho de destino. E THEFILE com o nome do arquivo do o arquivo em cada arquivo .zip que você deseja extrair. Os arquivos são renomeados de acordo com o nome do arquivo zip.

    
por 18.08.2015 / 11:22
1

O programa unzip do Info-Zip pode reconhecer glob patterns em nomes de arquivos. Portanto, se você tiver um arquivo zip com muitos arquivos chamado file1.gz em pastas diferentes:

$ unzip FolderName.zip '*/file1.gz'
Archive:  FolderName.zip
 extracting: FolderName/b/c/file1.gz          
 extracting: FolderName/b/e/file1.gz          
 extracting: FolderName/b/f/file1.gz 

Isto apesar do fato de que FolderName.zip também contém arquivos chamados coisas outros que file1.gz . Se você puder combinar o arquivo desejado com um padrão glob, unzip poderá extraí-lo.

Eu recebo a impressão de seu outro comentário de que você precisa concatenar todos esses arquivos extraídos. Algo parecido com isso fará o que você deseja, assumindo que a pasta de nível superior contendo unzip output seja chamada FolderName e o arquivo de destino ( file1.gz ) esteja na mesma profundidade de pasta em todas as subpastas:

$ gzcat FolderName/*/*/file1.gz > one-big-uncompressed-log-file

Ou seja, ele pula dois níveis de subpasta para extrair os arquivos file1.gz , depois os descompacta e concatena com o programa comum gzcat , encontrado em quase todos os lugares que você encontra gzip support.

    
por 18.08.2015 / 13:07