Portál AbcLinuxu, 13. listopadu 2025 01:03
Ahoj, potřeboval bych zkopírovat (10GB) soubor a průběh kopírováni zobrazit pomocí progressbaru v aplikaci kdialog. Jenže vůbec nevím jak to kopírováni s kdialogem provázat. Po třech hodinách hledání jsem našel jen jak pracovat s tím progressbarem a to je asi takto:
dbusRef=`kdialog --progressbar "Initializing" 4`
qdbus $dbusRef Set "" value 1
qdbus $dbusRef setLabelText "Thinking really hard"
sleep 2
qdbus $dbusRef Set "" value 2
sleep 2
qdbus $dbusRef setLabelText "Thinking some more"
qdbus $dbusRef Set "" value 3
sleep 2
qdbus $dbusRef Set "" value 4
sleep 2
qdbus $dbusRef close
Tady je skript, co dělá to co chceš s navrhovaným toolem - ten kdialog neznám (sem gnomista
#!/bin/bash
PIPE=.progress
if [ ! -p $PIPE ]
then
mkfifo $PIPE
fi
rsync -av --progress .sdata /tmp/ > $PIPE &
RSYNCPID=$!
cat $PIPE |
awk '{RS="\r"; sub("%", ""); print $2; fflush();}' |
zenity --progress --title "Kopírování" \
--text="Čekejte..." --percentage=0
if [ "$?" -ne 0 ]
then
kill $RSYNCPID
fi
Uprav si proměnnou PIPE a parametry zenity (texty)...
Ahoj, tvá odpověď mě samozřejmě zajímala a děkuji za ni, jenže minule jsi poslal jednořádkový script "zenity --progress". Hned jsem si šel hledat info o zenity, zkoušel s tím pracovat, narazil na kdialog a zkoušel i ten. Problém byl ten, že jsem zenity/kdialog nedokázal propojit s kopírováním. Strávil jsem nad tím poměrně dlouhou dobu a řekl jsem si, že bych dotaz mohl položit trochu jinak / lépe. Právě sedím a píšu prográmek v Qt, který by to udělal a najednou odpověď.
Děkuji moc, přesně tohle jsem od začátku chtěl. Ještě to zkusím upravit pro použití s kdialogem, ale pokud to nevyjde tak nevadí.
Měl bych k tomu skriptíku ale jednu otázku. Aby mi to kopírovalo fileA a vytvořilo fileB upravil jsem řádek rsync -av --progress fileA fileB > $PIPE &. Jakou roli v tom má hodnota proměnné PIPE nastavená na začátku ? Nechal jsem totiž .progress a funguje to.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.