#!/bin/zsh # 这个脚本可以根据文件 16 进制判断压缩格式,然后通过对应命令解压 # 解压函数:file 接收文件名,cmd 接收命令,opt 参数选项 decompress() { file=$1 cmd=$2 opt=$3 $cmd $opt $file } # 数组:存储支持的压缩格式和对应的文件头和解压命令 # 每个元素的格式为:文件 16 进制头:解压命令:选项 formats=( 377abcaf:7z:x 213c6172:ar:x 425a6839:bunzip2: 504b0304:unzip: 7f454c46:7z:x 1f8b0808:gunzip: 5d000080:unlzma: 1f8b0800:tar:-zxvf fd377a58:unxz: ) #判断是否为 tar filesion=$(file $1 | cut -d':' -f2-) if [[ "$filesion" == *tar* ]]; then tar -xvf "$1" #判断是否为文件 elif [[ -f $1 ]]; then header=$(xxd -p -l 4 $1) # 定义一个变量,表示是否找到匹配的格式 found=0 # 遍历数组,匹配文件头和解压命令 for format in $formats; do # 使用 IFS 分隔数组元素的各个字段 IFS=: read head cmd opt <<< $format # 如果文件头匹配,调用解压函数,并设置 found 为 1 if [[ $header == $head* ]]; then decompress $1 $cmd $opt found=1 break fi done # 如果没有找到匹配的格式,打印提示信息 if [[ $found == 0 ]]; then echo "无法识别的压缩格式" fi else echo "不是一个文件" fi