Recursivo UNTAR / UNZIP

2

eu recebo arquivos zip ou arquivos tar para trabalhar.

O arquivo zip / tar pode ter vários diretórios e subdiretórios que, por sua vez, podem conter arquivos tar / zip

Eu preciso descompactar / descompactar os que estão presentes dentro do Tar / Zip pai em seus respectivos locais de diretório e, em seguida, excluir o arquivo tar / zip.

Abaixo está o que eu poderia conseguir, mas o problema é que ele descompacta / descompacta somente o tar / zip pai e não aqueles que estão presentes dentro do zip / tar.

found=1

while [ $found -eq 1 ]
do
    found=0
    for compressfile in *.tar *.zip
    do     
        found=1
        echo "EXTRACT THIS:"$compressfile
        tar xvf "$compressfile" && rm -rf "$compressfile"
        unzip "$compressfile" && rm -rf "$compressfile"
        exc=$?

        if [ $exc -ne 0 ]
        then
            exit $exc
        fi
    done
done

Nota: o arquivo Tar pode conter arquivos Tar e Zip. Da mesma forma, o Zip pode conter arquivos Zip ou Tar.

    
por Know Your Tech 03.11.2017 / 17:33

1 resposta

0

Por favor, note que isso não foi testado, mas isso pode estar próximo ao que você está procurando:

#!/bin/bash

doExtract() {
    local compressfile="${1}"
    local rc=0

    pushd "$(dirname "${compressfile}")" &> /dev/null
    if [[ "${compressfile}" == *.tar ]]; then
        echo "Extracting TAR: ${compressfile}"
        tar -xvf "$(basename ${compressfile})"
        rc=$?
    elif [[ "${compressfile}" == *.zip ]]; then
        echo "Extracting ZIP: ${compressfile}"
        unzip "$(basename "${compressfile}")"
        rc=$?
    fi
    popd &> /dev/null

    if [[ ${rc} -eq 0 ]]; then
        # You can remove the -i when you're sure this is doing what you want
        rm -i "${compressfile}"
    fi

    return ${rc}
}

found=1

while [[ ${found} -eq 1 ]]; do
    found=0

    for compressfile in $(find . -type f -name '*.tar' -o -name '*.zip'); do
        found=1
        doExtract "${compressfile}"
        rc=$?
        if [[ $rc -ne 0 ]]; then
             exit ${rc}
        fi
    done
done

Editar: este script procura recursivamente os arquivos que terminam em .tar ou .zip . Sem a disponibilidade da opção -C para tar , eu uso pushd / popd para alterar para o diretório que contém os arquivos, extraí-los nesse diretório e, em seguida, retornar ao diretório anterior.

    
por 03.11.2017 / 18:55

Tags