pv == Pipe Viewer, Current version 1.1.4
[url]
http://www.ivarch.com/programs/pv.shtml
[/url]
Moderatore: Staff

#! /bin/bash
COLNNE=$(stty -a | tr -s ';' '\n' | grep "column" | sed s/'[^[:digit:]]'//g)
BARMIN=0
BARMAX=100
BARSYM="="
SPAZIO=8
GetBarra() {
BARVAL=$1
BARCOL=$(($COLNNE-$SPAZIO))
BARNUM=$((($BARVAL*$BARCOL)/($BARMAX-$BARMIN)))
for((j=0; j<$BARNUM; j++)); do
AVANZA="$AVANZA$BARSYM"
done
PERCEN=$(printf " %3d%% " $BARVAL)
echo -ne "$PERCEN$AVANZA\r"
}
for((i=$BARMIN; i<=$BARMAX; i++)); do
echo -ne "$(GetBarra $i)\r"
# dar -c $DISCO -R $DATIN -w -y ...
done
echo -e "\n"




kanzy ha scritto:@mario
eheheh.. l'avevo già provata questa cosa, ma così non gira per niente..
ho provato anche a fargli leggere un array fittizzio (tipo, appunto, "pv", che, se non gli dai in pasto un file con un ingombro definito, inserisci opzione -s(ize-dell'ipotetico-file) 25m(ega) per fornirgli un tot di bytes da processare per arrivare al 100%: solo così si mette in funzione).
#! /bin/bash
COLNNE=160
BARMIN=0
BARMAX=100
BARSYM="="
SPAZIO=60
GetBarra() {
BARVAL=$1
BARCOL=$(($COLNNE-$SPAZIO))
BARNUM=$((($BARVAL*$BARCOL)/($BARMAX-$BARMIN)))
for((j=0; j<$BARNUM; j++)); do
AVANZA="$AVANZA$BARSYM"
PERCEN=$(printf " %3d%% " $BARVAL)
echo -ne "$PERCEN$AVANZA\r"
done
}
for((i=$BARMIN; i<=$BARMAX; i++)); do
echo -e "$(GetBarra $i)"
# dar -c $DISCO -R $DATIN -w -y ...
done
echo -e "\n"


kanzy ha scritto:@mario
provato, ma non funge.
anche il mio script postato sopra funziona benissimo a livello bar.
ma quando gli dai in pasto il backup (portato a termine correttamente) la barra avanza solo di 1 simbolo (che è giusto, trattandosi di un solo processo terminato..).
questo è il busillis (che non riesco a risolvere per poca dimestichezza con le funzioni più evolute della shell).
pv, che potrebbe essere una soluzione (ma, anche qui, non riesco ad applicarla), presuppone l'installazione del binario sulla macchina.
se sei altrove, non serve. dunque, sevirebbe (a questo punto solo per crucca cocciutaggine) l'implementazione nello script, che stà sulla chiavetta.
intanto grazie mario per il tuo interessamento a questa cosa (che, come vedi, si trascina da molto tempo), ma penso che trovata una soluzione accettabile la cosa possa interessare molti, vista la valanga di post sull'argomento trovati in rete.

. Le altre osservazioni che fai sono, come sempre, puntuali ma, naturalmente, se non usi il comando non puoi sapere che di default -y=-y9 (cioè, solo se vuoi meno compressione lo devi specificare..). Il report a me serve per conoscere il nr dei files e vedere le differenze con quello precedente, dunque vorrei mantenerlo. L'opzione -w sovrascrive i precedenti, cosa voluta in quanto il backup non è differenziale e può succedere di effettuarlo 2 volte nella stessa data dunque di doverlo sovrascrivere. Interessante il fatto - che non avevo notato - che -v da un messaggio per *ogni* file. Quindi pensi di agganciare le iterazioni di 'for' ad ogni output di -v?.. posso provare, magari con un >/dev/null per evitare 2000 righe.. poi ti dico.



#!/bin/bash
#
# /usr/local/sbin/datbak
# cooked by kanzy [ kooonzy (aT) gmail (d0T) com ]
#
# Avviso
if [ "$UID" != "0" ]; then
echo -e "\n `basename $0` può essere eseguito solo da root.\n"
exit -1
fi
# Uso
if [ "$1" = "" -o "$1" = "--help" -o "$1" = "-h" ]; then
echo -e " Questo script effettua il backup di una directory sul secondo HD,"
echo -e " oppure su una memoria USB. Deve essere installato il comando DAR."
echo -e " Uso: `basename $0` [disco | stick]\n"
exit -1
fi
# Directory sorgente predefinita
#SORGE="/home/$USER/"
SORGE="/mnt/house/"
echo -ne "\n Origine dati [Invio per $SORGE]: "
read DATIN
if [ ! -s "$DATIN" ]; then DATIN="$SORGE"; fi
# Directory destinazione predefinita
#TARGET1="/mnt/hd2/$(basename "$DATIN")-$(date +%d-%m-%y)"
#TARGET2="/media/disk/$(basename "$DATIN")-$(date +%d-%m-%y)"
TARGET1="/mnt/stiva/data/$(basename "$DATIN")-$(date +%d-%m-%y)"
TARGET2="/media/Cruzer/data/$(basename "$DATIN")-$(date +%d-%m-%y)"
BackUp() {
echo -e "\n Backup in esecuzione, attendere... "
dar -c $DISCO -R $DATIN -w -y -m 256 -Z "*.jpg" -Z "*.png"
echo -ne "\n Verifica del backup in corso..."
if dar -t $DISCO > /dev/null ; then
echo -e "\t\t[ \E[1;32mOK\E[0m ]"
echo -e "\n Backup effettuato il $(date +%d-%m-%y) alle ore $(date +%T) dall'utente $(whoami)\n";
else
echo -e "\t\t[ \E[1;31mKO\E[0m ]"
echo -e "\n La verifica riscontra errori in uno o più files del backup.\n"
fi
exit
}
# HD2 backup
if [ "$1" = "disco" ]; then
echo -ne "\n Destinazione HD2 [Invio per $TARGET1]: "
read DISCO
if [ ! -s "$DISCO" ]; then DISCO="$TARGET1"; fi
BackUp
fi
# USB backup
if [ "$1" = "stick" ]; then
echo -ne "\n Destinazione USB [Invio per $TARGET2]: "
read DISCO
if [ ! -s "$DISCO" ]; then DISCO="$TARGET2"; fi
BackUp
fi
# EOF

#!/bin/bash
Barra() {
BARCOL=$(stty -a | head -n 1 | awk '{print $7}' | tr -s ';' '\n')
BARDIM=$(( $1 * ($BARCOL -10) / 100 ))
for((j=0; j<$BARDIM; j++)); do
BARSYM="$BARSYM="
XCENTO=$(printf " %3d%% " $1)
echo -ne "$XCENTO $BARSYM\r"
done
return
}
for((i=0; i<=100; i++)); do
echo -ne "$(Barra $i)\r"
done
echo -e "\n"
#!/bin/bash
#
# datbkp - Script per effettuare il backup di una directory su di un
#+ secondo HD o su di una memoria USB. E' necessario il comando DAR.
#
#====== Configurazione ===============================================
# Directory origine
#SORGE="/home/$USER/"
SORGE="/mnt/house/"
# Subdirectory origine da escludere
NODIR="lost+found"
# Directory destinazione
#TARGET1="/mnt/hd2/$USER-$(date +%d-%m-%y)"
#TARGET2="/media/disk/$USER-$(date +%d-%m-%y)"
TARGET1="/mnt/stiva/data/house-$(date +%d-%m-%y)"
TARGET2="/media/Cruzer/data/house-$(date +%d-%m-%y)"
#=====================================================================
ARGS=('--dsk' '-h' '--help' '--stk')
BackUp() {
echo -e "\n Backup in esecuzione, attendere... "
dar -c $DISCO -R $DATINP -P $NODIR -w -y -m 256 -Z "*.jpg" -Z "*.png"
echo -ne "\n Verifica del backup in corso..."
if dar -t $DISCO > /dev/null; then
echo -e "\t\t\t[ \E[1;32mOK\E[0m ]"
echo -e "\n Backup effettuato il $(date +%d-%m-%y) alle ore $(date +%T) dall'utente $(whoami).\n";
else
echo -ne "\n La verifica segnala errori in uno o più processi del backup."
echo -e "\t [ \E[1;31mKO\E[0m ]\n"
fi
return
}
Dati() {
echo -ne "\n Directory origine [Invio per $SORGE]: "
read DATINP
if [ -z "$DATINP" ]; then DATINP="$SORGE"; fi
return
}
Uso() {
echo -e "\n Questo script effettua il backup di una directory sul secondo HD,"
echo -e " oppure su una memoria USB. Deve essere installato il comando DAR."
echo -e " Lo script chiede una directory sorgente ed una di destinazione."
echo -e " Predefinite: input /home/user, output /mnt/hd2 | /media/disk."
echo -e " Uso: `basename $0` <opzione>\n"
echo -e " Opzioni:"
echo -e "\t--dsk \tbackup su disco rigido;"
echo -e "\t--stk \tbackup su memoria USB;"
echo -e "\t--help \tvisualizza queste informazioni ed esce.\n"
return
}
# HD2 backup
if [ "$1" = "${ARGS[0]}" ]; then
Dati
echo -ne "\n Destinazione HD2 [Invio per $TARGET1]: "
read DISCO
if [ -z "$DISCO" ]; then DISCO="$TARGET1"; fi
BackUp
exit
fi
# USB backup
if [ "$1" = "${ARGS[3]}" ]; then
Dati
echo -ne "\n Destinazione USB [Invio per $TARGET2]: "
read DISCO
if [ -z "$DISCO" ]; then DISCO="$TARGET2"; fi
BackUp
exit
fi
# Controlli
if [ $UID -ne 0 ]; then
echo -e "\n `basename $0` va eseguito da root.\n"
exit
elif [ -z "$1" ]; then
Uso
exit
elif [ "$1" = "${ARGS[1]}" -o "$1" = "${ARGS[2]}" ]; then
Uso
exit
elif [ "$1" != "${ARGS[0]}" -o "$1" != "${ARGS[3]}" ]; then
echo -e " Opzione '$1' sconosciuta."
echo -e " `basename $0` --help per uso.\n"
exit
fi
# EOF

kanzy ha scritto:Ecco qui lo scriptino finito (e fine a se stesso..) della barretta di avanzamento:
...
Adesso bisognerebbe farlo funzionare nello script che segue (finito):
...

: 2TB di vita passioni esperienze indimenticabili a tutti per un anno nuovo che *deve* essere assolutamente migliore! 

Visitano il forum: Nessuno e 0 ospiti