Script BASH pour afficher une barre de progression lors du traitement d'une liste de fichiers
#! /usr/bin/env bash terminal=false tty -s; if [ "0" == "$?" ]; then terminal=true ;fi if [[ $terminal = true ]] ; then DIALOG=${DIALOG=dialog} else DIALOG=${DIALOG=gdialog} fi [ -n "$DEBUG" ] && set -x i=0 j=0 k=0 int=0 fichtemp=`tempfile 2>/dev/null` || fichtemp=/tmp/test$$ trap "rm -f $fichtemp" 0 1 2 5 15 fichtemp2=`tempfile 2>/dev/null` || fichtemp2=/tmp/test2$$ trap "rm -f $fichtemp2" 0 1 2 5 15 IFS=$'\n' # Récupération du nombre d'inodes avec la commande STAT stat -L /* -fc %c > $fichtemp2 # Totalisation du nombre d'inodes for line in `cat $fichtemp2` ; do i=$(( i + line)) done ( # La première itération de la commande ls sert pour le décompte des inodes ls -Ibin -Ilib -Iproc -Irun -Isys -Itmp -I.snapshots -alR / 2>/dev/null > $fichtemp2 & # La seconde itération de la commande ls est la commande 'utile' ls -Ibin -Ilib -Iproc -Irun -Isys -Itmp -I.snapshots -alR / 2>/dev/null | grep '\/.git\/' | sed -e 's/\/.git.*$/\//p' |uniq | sed -e 's/$/|/g' | sed -e ':a;N;$!ba;s/\n//g' >$fichtemp ) | while [[ "$int" -lt 99 ]]; do j=$(sed -n '$=' "$fichtemp2") # Comme la commande peut être utilisée sans privilèges certeins inodes ne pourront être parcourus # Il faut donc ajuster le décompte pour tenir compte de la différence entre le nombre d'inodes # existants et ceux décomptés if [[ $k == $j ]]; then i=$((i-((i-j)/100))) ; fi k=$j p=$(echo "scale=2 ; $j / $i * 100" | bc) int=${p%.*} echo "$int" [[ $int -gt 99 ]] && break done | if [ -t 0 ] ; then dialog --title "Gauge" --gauge "Wait please..." 10 60 0 else zenity --progress --title="Update System Logs" --percentage=0 fi clear set +x