Pages : 1
#1 Le 16/03/2009, à 19:39
- dje16200
Zenity progress et rsync - tar
Bonjour à toute la communauté,
Voilà, je suis en train de faire un script de sauvegarde/synchronisation et pour le rendre un peu plus agréable à utiliser, j'ai recours à Zenity. J'arrive à peu près à faire ce que je veux avec cet outil (car je ne suis pas très exigent).
Pendant mes sauvegardes/synchros, j'affiche une barre de progression avec zenity --progress --pulsate. Bon ça marche, c'est cool, mais j'aimerais avoir un peu plus de détails au cours des opérations (pourcentage, débit, taille du fichier).
C'est là que ça se complique, d'autant plus que j'aimerais le faire avec les commandes rsync, tar, rar et zip.
J'ai trouvé quelques trucs un peu partout sur le net mais soit ça ne fonctionne pas, soit ce n'est pas ce que je veux ou alors je n'arrive pas à l'adapter (je ne suis pas très familier avec les commandes awk et sed).
-Pour rsync avec l'option --progress, j'ai trouvé une solution dans ce tuto (partie 4):
http://cudjoe.org/dotclear/post/2008/12 … rypt%C3%A9 , mais rien ne s'affiche chez moi:
rsync -va --progress $source $destination | awk -f rsync.awk | zenity --progress --percentage=0
-Pour tar, j'ai pensé à la commande "pv" (pipe viewer), avec un truc du genre:
tar -cvzf - $source | pv > $destination.tar.gz | zenity --progress --pulsate
Celle-ci ne me donnera pas le pourcentage (car pv ne connait pas la taille de la source) mais c'est pas grave, j'aimerais au moins avoir le débit et la taille du fichier de sortie dans zenity. Il me faudrait un moyen de rediriger la sortie de pv dans zenity.
Je sais que pour que celui-ci affiche la sortie d'une commande, il faut que la ligne commence par "#", mais je ne sais pas comment faire.
Puis pour rar et zip bah... je n'ai pas encore de piste.
Donc si quelqu'un a des idées/infos pour une de ces commandes... Merci d'avance!
Hors ligne
#2 Le 17/03/2009, à 10:27
- AnsuzPeorth
Re : Zenity progress et rsync - tar
Pour ta premiere commande, tu as bien le fichier rsync.awk avec le bout de script dedans ?
Pour le deuxième, essais en remplacant la redirection par tee (pas sur du resultat)
tar -cvzf - $source | pv | tee $destination.tar.gz | zenity --progress --pulsate
Pour ajouter #, plusieurs soluce, essais avec xargs: exemple
echo ok | xargs -I{} echo "#{}"
#ok
echo ok | xargs echo "#"
# ok
ou avec sed
echo ok | sed 's/^/#/'
#ok
Dernière modification par AnsuzPeorth (Le 17/03/2009, à 10:49)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#3 Le 17/03/2009, à 11:06
- dje16200
Re : Zenity progress et rsync - tar
Salut AnsuzPeorth, merci pour ta réponse... mais ça ne fonctionne pas.
Pour rsync, oui j'ai bien mon fichier rsync.awk avec le code à l'intérieur. Ça ne m'affiche rien au cours de la sauvegarde, juste le résumé à la fin de la commande:
"total size is XXX speedup is 1.00"
Pour tar (avec tee), ta commande me retourne des caractères illisibles dans tous les sens, mais ils sont affichés dans la fenêtre de Zenity, c'est déjà ça!
Je pense qu'il essaie de renvoyer le contenu du fichier tar.gz donc, ça ressemble à rien évidemment.
Ton astuce fonctionne pour ajouter # à chaque ligne, mais rien n'est redirigé dans zenity. J'ai essayé plusieurs trucs du genre:
(tar -cvzf - $source | pv -trb > $destination.tar.gz | sed 's/^/#/') | zenity --progress --pulsate
mais rien n'est affiché, même lorsque je supprime Zenity ou les parenthèses.
ou encore:
(tar -cvzf $dest/fichier.test.tar.gz $source | sed 's/^/#/') | zenity --progress --pulsate
pour essayer d'afficher les fichiers en cours de compression, mais zenity ne retourne toujours rien, pourtant les # sont bien présents lorsque je vire zenity...
Ce qui est étrange, c'est que si je fais
echo ok | xargs -I{} echo "#{}" | zenity --progress
ou
echo ok | sed 's/^/#/' | zenity --progress
le "ok" est bien affiché dans ma boîte.
Pour rediriger les infos de la commande pv, j'ai aussi essayé avec -N (qui permet d'ajouter un préfixe):
(tar -cvzf - $source | pv -trb -N"#" > $dest/fichier.test.tar.gz) | zenity --progress --pulsate
mais... encore et toujours rien, par contre les infos s'affichent dans le terminal, avec le # en début de ligne.
Bref, tout le monde aura compris, je rame là!
Hors ligne
#4 Le 17/03/2009, à 11:17
- AnsuzPeorth
Re : Zenity progress et rsync - tar
si c'est la commande pv qui renvois les infos essais comme ça (pas garanti,je connais pas pv et j'utilise jamais tar & co):
tar -cvzf - $source | tee $dest/fichier.test.tar.gz | pv -trb -N"#" | zenity --progress --pulsate
la commande tee "double" la sortie, donc elle envois dans le fichier et renvois sur l'entrée standard.
Dernière modification par AnsuzPeorth (Le 17/03/2009, à 11:19)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#5 Le 17/03/2009, à 11:34
- dje16200
Re : Zenity progress et rsync - tar
Toujours pas...
tee me renvoie cette fois-ci les caractères illisibles dans la console, qui n'arrête pas de biper...
En fait, dans le cas de tar, je me fiche un peu de sa sortie. Lui il ne me donne que les fichiers en cours de compression. J'utilise pv car ce dernier me donne la quantité de données et le débit qui transitent par un pipe.
Dans le cas de
(tar -cvzf - $source | pv -trb -N"#" > $dest/fichier.test.tar.gz) | zenity --progress --pulsate
les informations sont correctement affichées... dans la console!
J'ai donc pensé que pv affichait sur la sortie d'erreur et j'ai fait
(tar -cvzf - $source | pv -trb -N"#" > $dest/fichier.test.tar.gz) 2>&1 | zenity --progress --pulsate
Là, ma barre "pulse" bien, mais la sortie de pv est cachée...
En tout cas merci de te pencher sur mon problème!
Dernière modification par dje16200 (Le 17/03/2009, à 11:35)
Hors ligne
#6 Le 17/03/2009, à 11:45
- dje16200
Re : Zenity progress et rsync - tar
Pour info, voici la sortie de pv:
tar -cvzf - $source | pv -trb -N"#" > $dest/fichier.test.tar.gz
#: 231MO 0:00:14 [16,8MO/s]
Je suppose que c'est la sortie d'erreur car
(tar -cvzf - $source | pv -trb -N"#" > $dest/fichier.test.tar.gz) > /dev/null
me renvoie les infos
tandis qu'avec "2>":
(tar -cvzf - $source | pv -trb -N"#" > $dest/fichier.test.tar.gz) 2> /dev/null
la sortie est absente
Hors ligne
#7 Le 17/03/2009, à 13:57
- koderez (non connecté)
Re : Zenity progress et rsync - tar
Bonjour, tu peux peut-être t'inspirer de mon script qui utilise une progressbar "réelle" et non "pulsate" avec zenity.
http://forum.ubuntu-fr.org/viewtopic.ph … 9#p2465769
Bien sûr ce script est à améliorer mais l'idée est là : rsync -> sed -> zenity.
A bientôt
kod
#8 Le 17/03/2009, à 16:04
- dje16200
Re : Zenity progress et rsync - tar
Wow, merci!
J'ai essayé ta méthode, les infos à la fin de la sauvegarde s'affichent correctement (je retiens déjà ça), mais ma barre de progression reste désespérément vide, sans les informations de ta capture d'écran. Ça stagne à "Initialisation de la sauvegarde...", le script tourne et synchronise mais c'est tout.
J'ai essayé sur une autre machine, avec /bin/sh, /bin/bash, copier/coller ton script en ne changeant que la source et la destination, nada!
Alors je ne sais pas ce que je fais ou ne fais pas pour que ça foire, je vais continuer mes recherches...
Hors ligne
#9 Le 17/03/2009, à 17:07
- frafa
Re : Zenity progress et rsync - tar
Salut,
un bout de code extrait d'un de mes script il fait:
relever taille de source, puis la tache rsync est lancé en tache de fond ,
puis une boucle est lancée qui compare taille de source et destination et affiche evolution dans progress
source="/home/frafa/Bureau/aa/" # / en fin!
destination="/home/frafa/Bureau/bb/" # / en fin!
function DECIMALE()
{
if [ $1 = "-p" ]; then
precision=$2; shift 2;
else
precision=2
fi
bc -q << EOF
scale=$precision
$*
quit
EOF
}
function COPIE()
{
echo -e '\E[37;44m'"\033[1m Début de la copie \033[0m"
TAILLE=$(($(du -sB 1 "$source" | awk '{print $1}')/1000/1000));T1=0;
rsync -uravH --delete --exclude="*~" "${source}." "${destination}." &
echo -e '\E[37;44m'"\033[1m ________________________ \033[0m"
(while [ "$T1" -lt "${TAILLE}" ] ; do
T1=$(($(du -sB 1 "${destination}" | awk '{print $1}')/1000/1000))
T2=$(DECIMALE -p 2 $T1/$TAILLE*100)
(echo -e "${T2}\n#Pourcentage de la copie effectué: (${T2}%) de ${TAILLE}Mb";)
sleep 2 ;
done) | zenity --progress --width 600 --auto-close
}
COPIE
Hors ligne
#10 Le 17/03/2009, à 17:25
- dje16200
Re : Zenity progress et rsync - tar
Yes, merci frafa !
Ça marche
Bon, me reste encore tar et c'est en bonne voie:
(tar -czf - $source | pv -cns $(du -sh $source | awk '{print $1}') > $dest/fichier.test.tar.gz) 2>&1 | zenity --progress --auto-close
La barre de progression avance bien, me reste plus que le débit et la taille totale à afficher. Je vais m'appuyer sur ce qui vient d'être fait...
Je posterai la suite des évènements ici...
Hors ligne
#11 Le 09/02/2011, à 23:39
- BlueRabbit
Re : Zenity progress et rsync - tar
bonjour ,
bon je veux accélére mon script mais je cappot:
TT=$(du -ax ${RACINE_A_SAVE} $EXCLUSTION_TAR|wc -l)
tar cvpfz ${PART_TMP_EXT3_4}${SAVELINUX} ${RACINE_A_SAVE%\/} ${EXCLUSTION_TAR} 2>/dev/null|sed -e '
/^.\{53\}/ {s/\(^.\{20\}\).*\(.\{30\}$\)/"Fichier traité : \1\[...\]\2"/}
/^.\{53\}/! {s/^/"Fichier traité : &"/}
' 2>/dev/null|cat -n | sed -e '
{s/\([0-9]*\)\(\t\)\(.*\)/echo "#\1 sur '$TT' \3 \n$\(\(\1 * 100 \/ '$TT'\)\)"/e}
' 2>/dev/null|zenity --progress --width=600 --title="Sauvegarder $LABEL" --text="Initialisation de la sauvegarde....." --percentage=0 --auto-close || ERROR ;
qui a une idée
merci
archlinux 64 Bits
Portable ASUS i5
Hors ligne