Quanto ao seu código:
- Não coloque mensagens de erro em
STDOUT, háSTDERRpara elas. - Não esqueça de colocar nomes de arquivos (e veriables em geral) entre aspas.
tar xjfnão funcionaria secontiver espaços. -
A opção
gunzipebunzip2sem-k(--keep) exclui o arquivo compactado após a descompactação. Tem certeza que você quer? - O GNU
tarpode detectar o formato de compactação sozinho, mas não o force:$ tar xf "". Mas que seja como você deseja.
Quanto à tarefa, eu não a implementaria como uma função em .bashrc , mas como um script. Então, pode parecer assim: eu acho:
#!/bin/bash
# config
DEFAULT_TARGET="."
SCRIPTNAME="${0##*/}"
err() {
printf >&2 "$SCRIPTNAME: $*\n"
exit 1
}
ARC=""
[[ -f $ARC ]] || err $"'$ARC' does not exist"
ARC="$(readlink -f "$ARC")"
read -p "Extract to [default: $DEFAULT_TARGET]: " TARGET
[[ -z $TARGET ]] &&\
TARGET="$DEFAULT_TARGET"
[[ -d $TARGET ]] || err $"Directory '$TARGET' does not exist"
[[ -w $TARGET ]] || err $"Permission denied: '$TARGET' is not writable"
cd "$TARGET"
case "$ARC" in
*.tar.bz2) tar xjf "$ARC" ;;
*.tar.gz) tar xzf "$ARC" ;;
*.bz2) bunzip2 "$ARC" ;;
*.rar) unrar e "$ARC" ;;
*.gz) gunzip "$ARC" ;;
*.tar) tar xf "$ARC" ;;
*.tbz2) tar xjf "$ARC" ;;
*.tgz) tar xzf "$ARC" ;;
*.zip) unzip "$ARC" ;;
*.Z) uncompress "$ARC" ;;
*.7z) 7z x "$ARC" ;;
*) echo "'$ARC' cannot be extracted by $SCRIPTNAME" ;;
esac
Você precisa de algum comentário?