我已开始使用下面的 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
}
答案1
至于您的代码:
- 不要把错误信息放到
STDOUT
,那里有STDERR
适合它们的东西。 - 不要忘记将文件名(以及一般的可验证文件)括在引号中。如果包含空格
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
您需要任何评论吗?