Extrai vários arquivos zip da lista de texto em suas próprias pastas com log de erros

4

Descompacte os arquivos ZIP de uma lista de texto, cada um em sua própria pasta e exiba os erros em um arquivo de log.

A lista é assim:

0001.zip
0002.zip

Eu sei que posso usar o seguinte comando, mas não sei como para realizar o acima.

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" ""' _ {} \;

Obrigado.

    
por yarone 04.04.2017 / 11:40

2 respostas

7

Como você já tem o comando de extração sh -c 'unzip -d "${1%.*}" ""' , é possível usar xargs para converter arquivos de entrada em argumentos:

xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" ""' _

O {} não é necessário, pois xargs , por padrão, acrescenta a entrada à lista de argumentos. O -L1 faz com que ele use uma linha de entrada como argumento.

Em seguida, basta redirecionar a saída para um arquivo:

xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" ""' _ &> zip.log

Ou apenas os erros:

xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" ""' _ 2> zip.log
    
por muru 04.04.2017 / 12:12
6

Se presumimos que você tem uma lista de texto de arquivos zip, como:

zipfile1.zip
another_archive.zip
...

então você pode fazer

cat ziplist.txt | while read zipfile; do
    zipdir="$(basename "$zipfile").d"

    (
        mkdir "$zipdir"
        cd "$zipdir"
        echo "Extracting $PWD/../$zipfile"
        unzip "../$zipfile" 2>&1 > "../$zipfile.log"
    )
done

Isto irá criar um diretório, descompactar o arquivo zip nele, enquanto escreve tudo em um arquivo de log no mesmo diretório que o próprio arquivo zip.

    
por taifwa 04.04.2017 / 11:53