Não é tão difícil escrever um roteiro como esse, mas você precisa ser um pouco cuidadoso. O problema é que zip arquivos são como arquivos tar compactados e descompactá-los extrai os arquivos. Nem todos os arquivos compactados com gzip , bzip2 ou xz são necessariamente tar arquivos abaixo (é claro, um .tar.bz2 file é; portanto, é um .tgz file). Então você tem que definir o que você quer que seja feito com um arquivo .gz simples, e se você quer sempre um untarredo no arquivo tar.
Dado esse preâmbulo, você pode escrever um script como:
#!/bin/sh
# Optionally override the default commands
: ${GZIP:=gzip}
: ${TAR:=tar}
: ${BZIP2:=bzip2}
: ${XZ:=xz}
: ${UNZIP:=unzip}
for file in "$@"
do
case "$file" in
(*.tar.gz|*.tgz|*.tar)
$TAR -xf "$file";;
(*.tar.xz)
$XZ -cd "$file" | $TAR -xf -;;
(*.xz)
$XZ -d "$file";;
(*.gz)
$GZIP -d "$file";;
(*.tar.bz2)
$TAR -xf "$file";;
(*.bz2)
$BZIP2 -d "$file";;
(*.zip)
$UNZIP "$file";;
(*) echo "$0: unrecognized file type $file" >&2;;
esac
done
Não há muita ciência de foguetes lá. Estou assumindo que sua versão de tar reconhece os arquivos gzip e bzip2 automaticamente; se não, então você precisa fazer mais ou menos como eu fiz para xz . Existe também uma opção --use-compress-program=XXX para o GNU tar , mas nem todas as variantes do tar o reconhecem. Claramente, você pode adicionar mais padrões e (des) compressores como achar melhor. Reconhecer CPIO e arquivos shar não seria tão difícil. A lista continua.
A maioria das pessoas não se incomoda com esse roteiro. Por exemplo, costumo verificar o conteúdo do arquivo antes de extraí-lo. Você pode adicionar manipulação de argumentos ao script para permitir saída detalhada ou listar em vez de extrair ( -t para tar ; -l para unzip ) e talvez verbosidade.
Um passo mais difícil seria identificar o tipo de arquivo quando o sufixo não é reconhecido. Você pode executar file no arquivo e analisar o que ele diz. Outra possibilidade é analisar se o conteúdo do arquivo será colocado em um subdiretório ou não; se não, você pode criar um subdiretório e extrair o conteúdo no subdiretório. As oportunidades são legiões.