如何在Bash Shell脚本中检查文件是否为tar格式文件?
Bash脚本:检查文件存在并验证tar文件的正确姿势
嘿,我来帮你搞定这个脚本里的判断问题!首先你的思路是对的,但细节上有几个地方可以优化,咱们一步步来:
1. 怎么正确检查文件存在+是tar文件
你提到参考了-x判断可执行的方式,那对应文件存在的判断用-f(比-e更准确,因为-f专门检查是否是普通文件,排除目录等情况)。然后验证tar文件有几种靠谱的方法:
方法一:用tar命令直接测试(最推荐)
就像你尝试的tar -tzf,这个方法不仅能判断是不是tar文件,还能验证文件有没有损坏,非常实用:
if [ -f "$2" ]; then # 先试gzip压缩的tar,静默模式不输出内容 if tar -tzf "$2" > /dev/null 2>&1; then echo "$2 是有效的gzip压缩tar文件" # 这里写你的提取逻辑,比如 tar -xf "$2" -C 目标目录 else # 如果gzip测试失败,再试未压缩的tar if tar -tf "$2" > /dev/null 2>&1; then echo "$2 是有效的未压缩tar文件" else echo "$2 不是有效的tar文件" fi fi else echo "$2 不存在,或者不是普通文件" fi
解释:tar命令执行成功会返回0,失败返回非0;> /dev/null 2>&1是把所有输出(标准输出和错误输出)都扔掉,避免干扰脚本的正常输出。
方法二:用file命令判断文件类型(更严谨)
如果担心用户改扩展名(比如把zip改成tar),用file分析文件头最靠谱:
if [ -f "$2" ]; then # 检查MIME类型,覆盖tar和各种压缩的tar if file --mime-type "$2" | grep -qE 'application/(x-tar|gzip|x-gzip|x-bzip2|x-xz)'; then echo "$2 是有效的tar类文件" else echo "$2 不是tar类文件" fi else echo "$2 不存在" fi
方法三:检查扩展名(简单但不够可靠)
如果只需要快速判断扩展名,用case匹配就行,但要注意这个方法不验证文件实际内容:
if [ -f "$2" ]; then case "$2" in *.tar|*.tar.gz|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz) echo "$2 带有tar扩展名" ;; *) echo "$2 不是tar格式的扩展名" ;; esac else echo "$2 不存在" fi
2. 修正你的case代码片段
你写的case $1 "--extract")语法有问题,正确的case结构应该是这样的:
case "$1" in --extract) # 先检查参数是否存在 if [ -z "$2" ]; then echo "错误:请指定要提取的tar文件" echo "用法:$0 --extract <tar文件路径>" exit 1 fi # 检查文件存在并验证tar格式 if [ -f "$2" ]; then if tar -tzf "$2" > /dev/null 2>&1 || tar -tf "$2" > /dev/null 2>&1; then echo "正在提取 $2..." # 这里写提取逻辑,比如提取到指定目录: # tar -xf "$2" -C /path/to/destination else echo "错误:$2 不是有效的tar文件" exit 1 fi else echo "错误:$2 不存在或不是普通文件" exit 1 fi ;; # 可以加其他选项,比如--help --help) echo "用法:$0 --extract <tar文件路径>" exit 0 ;; *) echo "未知选项:$1" echo "用法:$0 --extract <tar文件路径>" exit 1 ;; esac
这里几个关键细节:
- 变量一定要加双引号(比如
"$1"、"$2"),否则文件名有空格时会被脚本拆成多个参数,导致错误。 - 加入了参数检查(
-z "$2"),避免用户只输入--extract却没给文件路径。 - 用
exit 1在出错时退出脚本,返回非0状态码,方便后续逻辑判断。
小提醒
- 如果你要提取到指定目录,记得先检查目标目录是否存在,不存在的话可以用
mkdir -p创建(比如mkdir -p /path/to/destination)。 - 处理用户输入时,尽量严谨,多做边界检查,避免脚本崩溃。
内容的提问来源于stack exchange,提问作者Luke_Nuke
相关产品推荐
相关产品推荐

