• pkgm : 压缩包维护与解压脚本



          学习Linux 的朋友们,大概都有过在 linux 下寻找各种解压方法和命令的经历吧! 可是, 总是容易忘记解压命令的用法, 而且手工维护也挺麻烦,一遍遍敲入这些命令也挺腻的。 如果能够方便地更新、解压压缩包, 那不是更好 ? 

            压缩包维护的基本思想:   

            1.  使用目录 $PKG_PATH 存放所有的压缩包(tar.gz, tar.bz2, deb, zip, rar, 7z, tgz);

            2.  使用文件 pkglist 同步保存这些压缩包的名称; 

            3.  使用命令 pkgm 来更新 pkglist 中的压缩包,并显示或解压其中的压缩包;

            4.  支持正则表达式匹配,进一步少敲字符。

            每当有新包置入 $PKG_PATH 时, 应使用 pkgm -c 来同步;  还可以设置 crontab 任务来定期执行。 比如 crontab -e 打开 .crontab 文件进行编辑 : 30 22 * * * $HOME/csat/scripts/pkgm -c 使得每天 22:30 分钟定期执行该任务。  -c 选项的作用根据 $PKG_PATH 下的所有压缩包同步其名称到 pkglist 中,此后可以根据 -l 或 -i 来便捷安装匹配给定模式的软件包。

           使用 pkgm -l 来显示其中的压缩包,比如$PKG_PATH下有google-chrome-stable_current_i386.deb, 只需 pkgm -l google 即可显示;  使用 pkgm -l ALL 能够查看$PKG_PATH 下的所有压缩包。

           使用 pkgm -i google 可以安装其中与 google BRE模式匹配的压缩包, 比如上述 google-chrome-stable_current_i386.deb。

     

           优势:  再也不用理会一大堆解压命令了。 只需要记住 pkgm -i|-c|-l 即可。 动态维护; 少敲几个字符。


            代码如下:   

    #!/bin/bash
    
    ##################################################################
    #                                                                #
    #  此脚本用于动态维护以压缩包形式安装的软件包                            #
    #  (.tar.gz , .tar.bz2, .deb, .zip, .rar)                        #
    #  所有压缩包名称放在文件 pkglist 中集中管理.                          # 
    #                                                                #          
    #  软件包放置路径: PKG_PATH=$HOME/csat/packges                     #
    #       安装路径: SETUP_PATH=$HOME/setupdir                       #
    #                                                                #
    #                                                                #
    ##################################################################
    
    # 可根据自己需求来修改这两个默认路径
    PKG_PATH=$HOME/csat/packages
    SETUP_PATH=$HOME/setupdir
    
    usage()
    {
        echo 'usage: pkgm  -c            将默认路径 $PKG_PATH(=$HOME/csat/packages) 下的压缩包名称同步到文件 $PKG_PATH/pkglist '
        echo '             -l  pkgname   显示默认路径 $PKG_PATH 下与 pkgname 以BRE形式匹配的压缩包名称;若参数为 ALL,则显示所有的压缩包名称 '
        echo '             -i  pkgname   将与 pkgname 以BRE 形式匹配的压缩包安装到默认路径 $SETUP_PATH 下; 若参数为 ALL ,则安装所有压缩包 '
        echo '             -h            显示帮助信息' 
        echo '                                       ' 
        echo 'NOTE: BRE 指 POSIX 支持的基本正则表达式,请参阅 http://en.wikipedia.org/wiki/Basic_regular_expression#POSIX_Basic_Regular_Expressions,或《SHELL脚本学习指南》(3.2) '
    }
    
    decomp()
    {
       file=$1
       echo "file is: " $file
       case  $file in
         *.tar.gz|*.tgz) tar xzf $PKG_PATH/$file -C $SETUP_PATH 
                      ;;
         *.tar.bz2) tar jxf $PKG_PATH/$file -C $SETUP_PATH
                       ;;
         *.deb) sudo dpkg -i $PKG_PATH/$file
                  ;;
         *.rar) unrar e $PKG_PATH/$file $SETUP_PATH
                  ;;
         *.zip) unzip $PKG_PATH/$file -d $SETUP_PATH
                  ;;
         *.7z)  7z e $PKG_PATH/$file -o${SETUP_PATH}/
                  ;;
        esac
    }
    
    
    
    if [ $# == 0 ]
    then
        usage
        exit 1
    fi
    
    while getopts :hcl:i: opt
    do
      case $opt in 
        c) touch $PKG_PATH/pkglist
           cat /dev/null > $PKG_PATH/pkglist 
           ls -1 $PKG_PATH | grep -E '[a-zA-Z0-9_.+-]+\.(tar\.(gz|bz2)|deb|rar|zip|7z|tgz)$' >> $PKG_PATH/pkglist
           ;;
        l) param=$OPTARG
           if [ "$param" = 'ALL' ]
           then
               cat $PKG_PATH/pkglist 
           else
               grep -i "$param" $PKG_PATH/pkglist  
           fi    
           ;;
        i) param=$OPTARG
           if [ "$param" = 'ALL' ]
           then
               files=$(grep '.*' $PKG_PATH/pkglist)
           else
               files=$(grep "$param" $PKG_PATH/pkglist) 
           fi
           for file in $files
           do
               decomp $file
           done  
           ;;
        h) usage
           ;;
        '?') echo "pkgm: 不正确的选项或参数: -$OPTARG" >&2
             echo "Type pkgm -h 获得用法信息 :) "
             exit 1
      esac
    done
  • 相关阅读:
    Android Studio自定义模板代码
    Android Studio自定义模板代码
    Android Studio自定义模板代码
    android studio 首字母提示 设置 大小写敏感
    android studio 首字母提示 设置 大小写敏感
    新入公司 问问题 ,快速了解代码的方法
    新入公司 问问题 ,快速了解代码的方法
    gradle编译很慢解决方法
    gradle编译很慢解决方法
    被relativeLayout的grivate center 折腾死了
  • 原文地址:https://www.cnblogs.com/lovesqcc/p/4037801.html
Copyright © 2020-2023  润新知