批量解压缩,显示进度条(1)

此脚本实现解压多个压缩包,并且已经进度条形式在终端打印当前进度。
 #!/bin/bash
 #***************************************
 #   批量解压缩
 #   Batch decompression
 #   981789763@qq.com
 #   2018-07-11 
 #***************************************
 #
 jdt(){
 # $1的值为当前正在处理的文件名 , $2的值为缓冲文件的文件名
 sum=0;d=0;n=0
 #获取总文件总个数
 sum=$(cat $2 | wc -l)
 #获取当前处理第几个文件   
 d=$(cat -n $2 | grep "$1"  | awk '{printf $1"\n"}') 
 #计算百分比
 n=$(echo "$d*100/$sum" | bc)
 str=""
 for ((x=0;x<=$(echo "$n/2"|bc);x++))
 do
   str+="="
 done
 printf "[\e[036m%-51s\e[0m] %d%% \r" "$str" "$n" 
 }
 #=========================================
 jys(){
 case $1 in
    *.tar.*) tar -xf $1 >/dev/null 2>&1
    ;;
    *.tar) tar -xf $1 >/dev/null 2>&1
    ;;
    *.tgz) tar -xf $1 >/dev/null 2>&1
    ;;
    *.zip) unzip -o $1 >/dev/null 2>&1
    ;;
    *.gz) gunzip  $1 >/dev/null 2>&1
    ;;
    *.bz2) bzip2 -d $1 >/dev/null 2>&1
    ;;  
    *) return 1
    ;;
 esac
 }
 #========================================
 main (){
 #定义一个临时文件.tmp,赋给变量,方便修改, $1 为解压路径
 name_tmp=.tmp;p=0
 cd $1 && ls |grep -E ".tar|.tgz|.gz|.bz2|.zip" >/dev/null 2>&1
 if [ ! $? -eq 0 ];then
    echo "当前目录下无压缩包"
    exit 111
 fi
 cd $1 && ls |grep -E ".tar|.tgz|.gz|.bz2|.zip" > $name_tmp || exit 3
 [ -d /tmp/jys_tmp/ ] || mkdir /tmp/jys_tmp
 printf "当前解压路径:%s 共%d个压缩包\n" "$1" "$(cat $name_tmp | wc -l)"
 for file_name in $(cat $name_tmp)
 do
    jys $file_name
    if [ $? -eq 1 ];then
       p=$((1+$p))
    else  
      \mv $file_name /tmp/jys_tmp/ >/dev/null 2>&1
    fi
    jdt $file_name $name_tmp
 done
 rm -rf $name_tmp
 echo -e
 #echo -e "\n共有$p个未知格式压缩包或文件"
 }
 #================主程序====================
 dir_name="";dir_name=$1
 if [ -n "$dir_name" ];then 
    main $dir_name
 else
    echo "Enter the absolute path to decompression after the script"
 fi
效果如下

jdt1

优化第二版:

批量解压缩,显示进度条(2)https://www.cnblogs.com/outsrkem/p/11257454.html

转载于:https://www.cnblogs.com/outsrkem/p/11068766.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值