Descompactando .tar.gz ou .zip

0

Estou escrevendo um script em um arquivo que contém arquivos .zip e .tar.gz. Eu tenho que extrair os arquivos. Eu sei como usar tar para tar.gz e descompactar arquivos zip, mas não sei como tomar decisões com base em extensões. Eu escrevi um script que funciona para tar.gz. Aqui está o roteiro.

#!/bin/bash
echo "Evaluate Lab"
select yn in "Yes" "No";
do
    case $yn in
    Yes )
        echo "Evaluating!!"
        #choose file
        file="$(ls | head -1)"
        echo $file

        mkdir temp
        echo "Decompressing file $file"
        #Decompress chosen tar.gz to temp
        tar -xf "$file" --directory temp

        cd temp/
        #Do some work here
        #get out of temp folder
        cd ../
        rm -rf temp
        echo "Moving $file to done"
        mv "$file" ../done/
        echo "Evaluate another"
        echo "1) Yes     2) No"
        ;;
    No )
        echo "Exiting...."
        exit;;
    *)
        echo "Enter right option";;
    esac
done

Eu tenho que trabalhar tanto no tar.gz quanto no zip. Alguma dica?

    
por LearningGiraffe 11.11.2018 / 09:59

1 resposta

1

A seguir, uma variação do seu script:

#!/bin/sh

mkdir -p "done"

for file in ./*.tar.gz ./*.zip; do
    printf 'Press Enter to process %s, or Ctrl+C to quit\n' "$file"
    read bogus

    tmpdir=$(mktemp -d)

    printf 'Decompressing %s into %s\n' "$file" "$tmpdir"
    case $file in
        *.tar.gz) tar -xz -f "$file" -C "$tmpdir" ;;
        *.zip)    unzip      "$file" -d "$tmpdir" ;;
    esac

    (
        cd "$tmpdir"
        # do work here

    )

    rm -rf "$tmpdir"
    mv "$file" "done"
done

Ele itera todos os arquivos .tar.gz e .zip no diretório atual. Para cada arquivo, um diretório de extração temporário é criado usando mktemp -d e o arquivo é extraído com tar ou unzip dependendo do sufixo do nome do arquivo.

O subshell em torno do cd e o que mais você precisa fazer com os dados extraídos permite pular os diretórios de mudança de volta para onde você começou (o diretório de trabalho alterado é local para o subshell).

Suponho que o principal aqui seja a instrução case ... esac . Esta é uma maneira de fazer coisas diferentes dependendo do padrão que uma string combina.

Veja também:

por 11.11.2018 / 11:03