LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 868|回复: 4

[工欲善其事 必先利其器]系列: 1.智能解压

[复制链接]
发表于 2010-3-30 23:27:16 | 显示全部楼层 |阅读模式
LFS,BLFS的源代码包很多,常见的压缩格式有
.tar.gz
.tar.bz2
.tar.bz2
.tgz
.zip
...
等,为了能够达到智能解压的目的, 编写了一个脚本以完成智能解压上面的扩展名

目的:   能够自动识别上边扩展并调用相应的命令进行解码
使用方法: 脚本名字 包的路径
执行结果: 成功 $?为0,并显示解压后的目的, 否则返回$?为1

示例;
命令:./decomp /lfs-sources/file-5.03.zip
结果:
file-5.03

脚本编写思路:
先编写一个解压的函数(以tar为例)如:

TAR_PROC()
{
    local dir file
    # 判断文件是否存在
    if [ ! -f $1 ] ;
    then
        return 1
    fi   

  #获取文件部分
    file=$(echo $1 | sed 's/.*\///g')
    if [ -z file ] ;
    then
        return 2
    fi

    dir=$(echo $file | sed 's/\(.tar.gz\)\|\(.tar.bz2\)\|\(.tgz\)//g')
    if [ $dir = $file ]  ;
    then
        return 3
    fi

    #判断tar命令是否存在
    CHECK_CMD tar
    if [ $? -ne 0 ] ;
    then
        return 4
    fi

    tar -xf $1
   
    echo $dir #显示解压后的目录

    return 0
}

最后在SH_MAIN添加相应的处理流程
    # 进行tar流程
    result=$(TAR_PROC $1)
    if [ $? -eq 0 ] ;
    then
        echo $result
        exit 0
    fi

个人认为这样子编写可以方便扩展,而通过扩展,可以使脚本更智能化



附件 decomp.zip脚本

请大家都提意见,嘻嘻

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2010-3-31 08:35:42 | 显示全部楼层
我的签名里scripts里有个extract, 是rox和终端用的...但是我定义了解压到的目录(平日的压缩包有的里面都是散的), 调用了7z, 可以参考下 ...
回复 支持 反对

使用道具 举报

发表于 2010-4-1 08:03:09 | 显示全部楼层
不错,有个专门解压的函数对LFS脚本很方便。
如果能用bash自己的字符串函数替换外部程序如echo,sed会更好
另外tar本身支持格式自动识别,所以除了tar不认识的如zip,rar外,其他可全扔给tar处理。
回复 支持 反对

使用道具 举报

发表于 2010-4-1 22:30:31 | 显示全部楼层
呵呵,现在懒人越来越多,越来越会享尽人生 :)
回复 支持 反对

使用道具 举报

发表于 2010-4-2 18:19:14 | 显示全部楼层
有些多余,tar -xvf tarball -C somewhere 够用。
zip 发布的开源软件包没几个。

好像很久前有人作过类似事情,当时 tar 还不够智能。

懒人不做无用功。:flash:
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表