Сценарий Bash для извлечения архивирует - как заставить сценарий попросить место назначения папки?

Я начал использовать сценарий удара ниже для распаковки архивов. Как я пошел бы о том, чтобы заставлять сценарий спросить, хотел ли бы я указать папку или просто использовать папку по умолчанию для извлечения к?

Я хотел бы смочь запустить скрипт архива и получить быстрое высказывание:

"Извлечение к папке Y по умолчанию или N, вместо этого указывает папку (введите папку). Любая справка ценится :)

Выборка от .bashrc

extract () {
if [ -f $1 ] ; then
  case $1 in
    *.tar.bz2)   tar xjf $1     ;;
    *.tar.gz)    tar xzf $1     ;;
    *.bz2)       bunzip2 $1     ;;
    *.rar)       unrar e $1     ;;
    *.gz)        gunzip $1      ;;
    *.tar)       tar xf $1      ;;
    *.tbz2)      tar xjf $1     ;;
    *.tgz)       tar xzf $1     ;;
    *.zip)       unzip $1       ;;
    *.Z)         uncompress $1  ;;
    *.7z)        7z x $1        ;;
    *)     echo "'$1' cannot be extracted via extract()" ;;
     esac
 else
     echo "'$1' is not a valid file"
 fi
}
2
задан 30 August 2014 в 10:35

1 ответ

Что касается Вашего кода:

  • Не помещайте сообщения об ошибках в STDOUT, существует STDERR для них.
  • Не забывайте включать имена файлов (и veriables в целом) в кавычках. tar xjf $1 не работал бы если $1 содержит пробелы.
  • gunzip и bunzip2 без -k (--keep) опция удаляет сжатый файл после распаковки. Вы уверены, что хотите это?
  • GNU tar может обнаружить формат сжатия его собственным, просто не вызывайте его: $ tar xf "$1". Но позвольте ему быть, как Вы желаете.

Что касается задачи, я не реализовал бы его как функцию в .bashrc но как сценарий. Таким образом, может быть похоже, что, я думаю:

#!/bin/bash

# config
DEFAULT_TARGET="."

SCRIPTNAME="${0##*/}"

err() {
    printf >&2 "$SCRIPTNAME: $*\n"
    exit 1
}

ARC="$1"
[[ -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

Вам нужны какие-либо комментарии?

1
ответ дан 7 October 2019 в 04:34

Другие вопросы по тегам:

Похожие вопросы: