Validar senha para um grande conjunto de arquivos zip

1

Estou trabalhando em um processo de ETL para um cliente. Outro fornecedor forneceu os dados brutos como um conjunto de aproximadamente 100 arquivos ZIP protegidos por senha.

Eu quero validar que a senha dada está correta para este conjunto de arquivos.

O script no qual estou trabalhando atualmente usa um loop e 7zip:

#!/bin/bash
set -x
for filename in ../TheData/*Data*of*.zip; do
        echo "Checking $filename"
        7z t -ple_super_secret_assword $filename
done

A saída canalizada para um arquivo é assim:

Checking ../TheData/Project1999Data_1of7.zip
+ 7z t '-pseeeecret' ../TheData/Project1999Data_1of7.zip

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Xeon(R) CPU E5-2470 0 @ 2.30GHz (206D7),ASM)

Scanning the drive for archives:
1 file, 632866983 bytes (604 MiB)

Testing archive: ../TheData/Project1999Data_1of7.zip

ERRORS:
Headers Error

Quando executado sem tubos, há um medidor de progresso. Acho que o erro dos cabeçalhos é espúrio, já que testar os trabalhos de arquivamento e checar alguns trechos completos também parece OK.

A simples extração de todos os dados não é uma opção no momento, aguardando o processo de solicitação de alteração para alocação de armazenamento.

Existe uma maneira mais rápida de simplesmente garantir que uma senha funcione em um conjunto de arquivos zip?

Existe alguma maneira de capturar os códigos de retorno a partir disso e ecoar uma simples aprovação / reprovação? 7zip tem vários códigos de retorno documentados

É possível alterar este script para executar as verificações em paralelo? O 7z parece usar apenas 80% de um núcleo, sugerindo que esteja limitado por E / S.

Não parece haver uma mudança no desempenho com o 7zip usando a função t (teste) ou l (lista).

    
por Freiheit 29.03.2017 / 02:56

1 resposta

1

Verifique o código de erro / saída da shell.

Quando eu executo o 7zip para compactar um arquivo (e proteger com uma senha),

echo "now that is what I call bubba" > bubba
7z a -psecret foo bubba
rm bubba #remove for convenience

Eu posso rodar o 7zip para tentar extrair / testar o conteúdo do arquivo, e 7zip produz erros,

7z t -pnotsecret foo.7z
...
Extracting bubba    Data error in encrypted file. Wrong password?
...
Sub items Errors: 1

Então eu posso verificar o código de erro da shell,

echo $?
2

Quando forneço a senha correta,

7z t -psecret foo.7z
...
Extracting bubba
...
Everything is Ok

Então eu verifico o código de erro da shell,

echo $?
0

Assim, você pode usar o código de erro / saída da shell para simplesmente verificar a senha correta ou pode verificar a saída de 7z e grep -i "está tudo certo".

Aqui está uma revisão do seu script,

#!/bin/bash
set -x
for filename in ../TheData/*Data*of*.zip; do
    #echo "Checking $filename"
    7z t -ple_super_secret_assword $filename
    if [ $? -eq 0 ]; then echo "ok: $filename"
    else echo "error: password failed $filename"
    fi
done
    
por 29.03.2017 / 04:29

Tags