notes:bash-progress-bar
BASH : Barre de progression simple
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
notes/bash-progress-bar.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1
