Quanto ao seu código:
- Não coloque mensagens de erro em
STDOUT
, háSTDERR
para elas. - Não esqueça de colocar nomes de arquivos (e veriables em geral) entre aspas.
tar xjf
não funcionaria secontiver espaços.
-
A opção
gunzip
ebunzip2
sem-k
(--keep
) exclui o arquivo compactado após a descompactação. Tem certeza que você quer? - O GNU
tar
pode 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?