此腳本實現解壓多個壓縮包,而且已經進度條形式在終端打印當前進度。
#!/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