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:
-
Sobre a declaração
case
no padrão POSIX .