x/bin/untar.sh

55 lines
1.3 KiB
Bash
Executable File

#!/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