BASH script para extrair arquivos - como fazer o script pedir o destino da pasta?

2

Eu comecei a usar o script bash abaixo para descompactar arquivos. Como eu faria para fazer o script perguntar se gostaria de especificar uma pasta ou apenas usar a pasta padrão para extrair?

Gostaria de poder executar o script de arquivo e receber uma mensagem dizendo:

"Extraia para a pasta padrão Y ou N, em vez disso, especifique a pasta (digite a pasta). Qualquer ajuda apreciada:)

Trecho de .bashrc

extract () {
if [ -f  ] ; then
  case  in
    *.tar.bz2)   tar xjf      ;;
    *.tar.gz)    tar xzf      ;;
    *.bz2)       bunzip2      ;;
    *.rar)       unrar e      ;;
    *.gz)        gunzip       ;;
    *.tar)       tar xf       ;;
    *.tbz2)      tar xjf      ;;
    *.tgz)       tar xzf      ;;
    *.zip)       unzip        ;;
    *.Z)         uncompress   ;;
    *.7z)        7z x         ;;
    *)     echo "'' cannot be extracted via extract()" ;;
     esac
 else
     echo "'' is not a valid file"
 fi
}
    
por user224674 30.08.2014 / 08:28

1 resposta

1

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 se contiver espaços.
  • A opção gunzip e bunzip2 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?

    
por Dmitry Alexandrov 30.08.2014 / 21:06