martinoff Δημοσ. 3 Ιουνίου 2013 Δημοσ. 3 Ιουνίου 2013 (επεξεργασμένο) some more fixes http://sprunge.us/SMeX Επεξ/σία 4 Ιουνίου 2013 από martinoff 1
tritonas00 Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Εχω ενα θεματακι. Ο dialog --gauge θελει να του δινεις απο νουμερα 1-100 και τα εμφανιζει σαν ποσοστο. Μετατρεποντας το output της tar σε νουμερα με: while read ln; do b=$(( b + 1 )) && echo -e "\r$(($b*100/$total))"; done παιρνω: 0 0 0 0 1 1 1 1 2 2 2 2 .... 100 που θα πει οτι ναι μεν δουλευει το gauge, αλλα αργει πολυ. δοκιμασα με uniq -d και awk '!(saw[$0]++)' ωστε να παιρνω κανονικα: 1 2 3 4 5 .... 100 αλλα μετα δεν μπορω να κανω σωστο pipe στον dialog (πρωτα τελειωνει το output της tar και μετα αρχιζει το gauge.) Help ? Αν δεν μπορει να γινει κατι τοτε θα το αφησω με dialog --progress να δειχνει το ποσοστο, χωρις gauge.
imitheos Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Καταρχάς το b είναι ο αριθμός των αρχείων ? (ή των block του tar ?) Αν το b παίρνει τιμές από το 1 έως πχ το 550 και το ανάγεις στο 100 λογικό δεν είναι να έχεις τετραπλές και πενταπλές εμφανίσεις και (φαινομενικά) να αργεί να ανανεώσει το gauge ? Με τον δεύτερο τρόπο και το uniq πως το κάνεις ? Μάλλον δεν κατάλαβα κάτι καλά.
tritonas00 Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Στο b δινω μια αυξουσα τιμη για καθε νεο line του output της tar.Ναι το ξερω οτι ειναι λογικο, το θεμα ειναι πως μπορω πετυχω αυτο: run_tar 2>>"$BRFOLDER"/backup.log | while read ln; do b=$(( b + 1 )) echo -e "\r$(($b*100/$total))" done | uniq -d χωρις το uniq -d, ή το παραπανω να γινει real-time pipe στον dialog. Το προβλημα μου ειναι οτι αυτο: run_tar 2>>"$BRFOLDER"/backup.log | while read ln; do b=$(( b + 1 )) && echo -en "\rCompressing: $(($b*100/$total))%"; done ειναι το ιδιο γρηγορο οσο η ιδια η tar/rsync, ενω αυτο: run_tar 2>>"$BRFOLDER"/backup.log | while read ln; do b=$(( b + 1 )) && echo -e "\r$(($b*100/$total))"; done | dialog --gauge "Compressing..." 0 50 κανει πανω απο τον διπλασιο χρονο, και για αυτο υποθετω οτι φταινε οι πολλαπλες ιδιες τιμες στο ποσοστο.
imitheos Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Στο b δινω μια αυξουσα τιμη για καθε νεο line του output της tar. Ναι το ξερω οτι ειναι λογικο, το θεμα ειναι πως μπορω πετυχω αυτο: run_tar 2>>"$BRFOLDER"/backup.log | while read ln; do b=$(( b + 1 )) echo -e "\r$(($b*100/$total))" done | uniq -dχωρις το uniq -d, ή το παραπανω να γινει real-time pipe στον dialog. Το προβλημα μου ειναι οτι αυτο: run_tar 2>>"$BRFOLDER"/backup.log | while read ln; do b=$(( b + 1 )) && echo -en "\rCompressing: $(($b*100/$total))%"; doneειναι το ιδιο γρηγορο οσο η ιδια η tar/rsync, ενω αυτο: run_tar 2>>"$BRFOLDER"/backup.log | while read ln; do b=$(( b + 1 )) && echo -e "\r$(($b*100/$total))"; done | dialog --gauge "Compressing..." 0 50 κανει πανω απο τον διπλασιο χρονο, και για αυτο υποθετω οτι φταινε οι πολλαπλες ιδιες τιμες στο ποσοστο. Τρέχοντας τα σε μένα παίρνω και στις δύο περιπτώσεις ίδιο χρόνο (12sec). Αν δεν έχεις κάποιο sleep μετά από κάθε τιμή δεν μπορώ να καταλάβω γιατί να θέλει διπλό χρόνο η dialog. Γιατί δεν βάζεις μπακάλικα μια 2η μεταβλητή ώστε να δεις αν φταίνε οι πολλαπλές τιμές ? Αν το b αφού έχει αυξηθεί είναι ίδιο με το lastb να μην τρέχει τίποτα αλλιώς να τρέχει lastb=b και μετά το echo. Edit: Επειδή ο χρόνος ήταν πολύ μικρός και ίσως να μην φαίνεται η διαφορά, δοκίμασα ένα μεγαλύτερο κατάλογο και πάλι πήρα ίδιο αποτέλεσμα (3 λεπτά και 9 δευτερόλεπτα). Δοκίμασα και σκέτο tar μήπως ο φόρτος που βάζει στον επεξεργαστή η gzip φέρνει πιο κοντά τα δύο αποτελέσματα και δεν αφήνει να φανεί η διαφορά και πάλι πήρα ίδιο αποτέλεσμα.
tritonas00 Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Δεν μπορω να καταλαβω...πχ για τον /etc μονο: tar cvf /dev/null /etc 2> /dev/null | while read ln; do a=$(( a + 1 )) && echo -en "\rCalculating: $a Files"; done για να δω ποσα αρχεια θα μπουν στο archive, οποτε total=1029 αρχεια time tar cvpzf etc.tar.gz /etc 2> /dev/null | while read ln; do b=$(( b + 1 )) && echo -en "\rCompressing: $(($b*100/1029))%"; done Compressing: 100%real 0m1.876suser 0m1.400ssys 0m0.140s Ωραια και καλα. Αλλα: time tar cvpzf etc.tar.gz /etc 2> /dev/null | while read ln; do b=$(( b + 1 )) && echo -e "\r$(($b*100/1029))"; done | dialog --gauge "Compressing..." 0 50 real 0m11.744suser 0m1.840ssys 0m0.320s Δεν εχω μεσα καπου sleep... imitheos, μπορεις να δωσεις ενα παραδειγμα με το statement που ειπες με το lastb?
imitheos Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Δεν μπορω να καταλαβω...πχ για τον /etc μονο: tar cvf /dev/null /etc 2> /dev/null | while read ln; do a=$(( a + 1 )) && echo -en "\rCalculating: $a Files"; doneγια να δω ποσα αρχεια θα μπουν στο archive, οποτε total=1029 αρχεια time tar cvpzf etc.tar.gz /etc 2> /dev/null | while read ln; do b=$(( b + 1 )) && echo -en "\rCompressing: $(($b*100/1029))%"; done Compressing: 100%real 0m1.876s user 0m1.400s sys 0m0.140s Ωραια και καλα. Αλλα: time tar cvpzf etc.tar.gz /etc 2> /dev/null | while read ln; do b=$(( b + 1 )) && echo -e "\r$(($b*100/1029))"; done | dialog --gauge "Compressing..." 0 50 real 0m11.744suser 0m1.840s sys 0m0.320s Δεν εχω μεσα καπου sleep... imitheos, μπορεις να δωσεις ενα παραδειγμα με το statement που ειπες με το lastb? Δίκιο έχεις. Τελικά πρέπει να παίζει κάτι με το sleep που είπα αλλά όχι όπως το είπα. Ίσως η dialog για να εμφανίζει πιο ομαλά τα αποτελέσματα εισάγει μια μικρή καθυστέρηση μετά από κάθε εμφάνιση. Όταν έχεις μεγάλο αριθμό αρχείων έχεις μεγάλη καθυστέρηση. Το παράξενο είναι πως όταν τρέχω τις εντολές σε ένα κατάλογο με 601 αρχεία παίρνω ολόιδια αποτελέσματα (το gauge μάλιστα είναι πιο γρήγορο) ενώ στο /etc που έχω 1621 αρχεία παίρνω καθυστέρηση όπως και εσύ (5.8s με 16s). Δοκίμασα το ίδιο σε ένα maildir με 17552 πολύ μικρά αρχεία και ενώ το απλό θέλει 2.2s, η dialog χρειάζεται 178s Αλλάζοντας τον κώδικα ώστε να χρησιμοποιεί μια ενδιάμεση μεταβλητή και να τυπώνει μόνο 100 τιμές φέρνει τον χρόνο σε 2.0s b=0 lastper=0 time tar cvpzf etc.tar.gz /etc 2> /dev/null | while read ln; do b=$(( b + 1 )) per=$((b*100/$total)) if [ $per -gt $lastper ]; then lastper=per echo -e "\r$(($b*100/1029))" fi done | dialog --gauge "Compressing..." 0 50
tritonas00 Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 imithee ευχαριστω πολυ! tar cvpzf etc.tar.gz /etc 2> /dev/null | while read ln; do b=$(( b + 1 )) per=$(($b*100/1029)) if [[ $per -gt $lastper ]]; then lastper=$per echo $lastper fi done | dialog --gauge "Compressing..." 0 50 Τρεχει νερακι!
tritonas00 Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Ωραιο το man page martinoff, εκανα λιγες αλλαγες και το ανεβασα στο git. Θα μπει στην 3.2. Λογικα το κανω .gz και το πεταω στο /usr/share/man/man1/ ε ?
martinoff Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 ναι, αν θες το κάνεις και με nroff αλλα και gzip και install το ιδιο ειναι
tritonas00 Δημοσ. 6 Ιουνίου 2013 Μέλος Δημοσ. 6 Ιουνίου 2013 gg εκανα ορισμενες διορθωσεις και το εσπρωξα.
martinoff Δημοσ. 6 Ιουνίου 2013 Δημοσ. 6 Ιουνίου 2013 line 280 βγάλε το ενα be και τι μανία είναι αυτή να βάλεις __ στο active ? μια παύλα θέλει
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα