Я начал использовать сценарий удара ниже для распаковки архивов. Как я пошел бы о том, чтобы заставлять сценарий спросить, хотел ли бы я указать папку или просто использовать папку по умолчанию для извлечения к?
Я хотел бы смочь запустить скрипт архива и получить быстрое высказывание:
"Извлечение к папке 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
}
Что касается Вашего кода:
STDOUT
, существует STDERR
для них.tar xjf $1
не работал бы если $1
содержит пробелы.gunzip
и bunzip2
без -k
(--keep
) опция удаляет сжатый файл после распаковки. Вы уверены, что хотите это?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
Вам нужны какие-либо комментарии?