Van-e valamilyen módszer arra, hogy ha letöltök valamit wget-el vagy feltöltök wput-al csak magát a százalék értékét irassa ki, ne húzzon csikot meg pöttyöket. Van egy speckó kijelző és max echo-val tudok rá irogatni egy speckó pipe-on keresztül. A legjobb az lenne ha valami wrapper-el lehetne megoldani a problémát, ami kiolvasná egy fájlból vagy bárhonnan a wget aktuális százalékát, majd echo-val kinyomná a kijelzőre.
- 1330 megtekintés
Hozzászólások
wget-el
wput-ol
wrapper-el
t
- A hozzászóláshoz be kell jelentkezni
Ha ez a helyesírásra vonatkozik, akkor nem jó.
------------------------------------------------
A legtöbb ember azt hiszi, csak a gyomra üres...
- A hozzászóláshoz be kell jelentkezni
Ha igeként használjuk, akkor jó. :)
Jancsi wget-el valamit ... ugye
"...letöltök valamit wget-el vagy feltöltök wput-al..." de itt hasonulás van, azaz wgettel, wputtal a jó.
- A hozzászóláshoz be kell jelentkezni
szerintem az igés alakhoz sem kell kötőjel: wgetelek, wputolok, wrapperezünk.
- A hozzászóláshoz be kell jelentkezni
... vagy a progress.c-t átírva olyat írni, ami megfelel.
- A hozzászóláshoz be kell jelentkezni
Add meg opcióként a background-ot, így kilogolja neked a statust. Ezt egy tail-lal már ki tudod szedni x időnként. /szerintem/
- A hozzászóláshoz be kell jelentkezni
Csináltam egy ilyen dolgot, lehet, hogy használ:
#! /bin/bash
j=0
while true
do
clear
echo "=== Frissites Nr$j ==="
for i in `ls /home/zolej/wget-log*`
do
/usr/bin/awk -F " " '{print $7}' /home/zolej/wget-log | tail -2
done
let j++
sleep 5
done
Szóval nem megkövezni, soha nem szoktam scriptet írni, még csak tanulom.
Le lehet egyszerűsíteni, nekem a kijelzésre jó, elhagyhatod a clear-t, az inputba rakhatod a saját fájlodat (pl ./figyelo.sh ./amit-figyelsz.log) Több egyidejű letöltéshez meg kell bolondítani a scriptet, illetve a spéci kimenetedet hozzá kell fűznöd. Mivel az én szerveremen baromi gyors az internet, kellett keresnem valami lassú mirrort a nagy fájlomnak, mert mire elkezdtem a monitorozást, addigra az le is jött :)))
Előfeltétele, hogy a wget-et -b kapcsolóval indítsd, ahogy írtam fentebb. Ahogy gondolom, ezer meg ezer megoldás létezik, ez az én barkácsom. Használd, ha tudod.
- A hozzászóláshoz be kell jelentkezni
Nem tudom kipróbálni, de ilyesmi nem lenne jó?
wget http://domain.com/foo.bar 2>&1| awk '/^[0-9]+\%/ { print $1; }'
szerk.: nem, nem lesz jó.
szerk.2:
wget http://domain.com/foo.bar 2>&1| less | awk '/^[0-9]+\%/ { print $1; }'
Így már talán.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Ez a background paraméter nagyon kecsegtető, viszont kellene egy kis ötlet, hogy tudnék az alábbi sorokból bizonyos részeket kivenni:
0K ........ ........ ........ ... 100% 3.98K=8.4s
vagy
0K ........ ........ ........ ........ ........ 3% 5.96K 3m39s
50K ........ ........ ........ ........ ........ 7% 9.38K 2m52s
100K ........ ........ ........ ........ ........ 11% 17.0K 2m14s
150K ........ ........ ........ ........ ........ 14% 4.61K 2m39s
200K ........ ........ ........ ........ ........ 18% 28.8K 2m9s
250K ........ ........ ........ ........ ........ 22% 7.49K 2m6s
300K ........ ........ ........ ........ ........ 25% 14.3K 1m53s
350K ........ ........ ........ ........ ........ 29% 9.70K 1m46s
400K ........ ........ ........ ........ ........ 33% 10.1K 99s
...
...
1250K ........ ........ ........ ........ ........ 96% 9.77K 6s
1300K ........ ........ ........ ........ ........ 99% 9.35K 0s
1350K ... 100% 1.67M=2m36s
Tehát minden sorból a xx% és az idő értékek lennének fontosak.
Az awk '{print $7}' és awk '{print $9}' sajna az első esetnél nem jön be, mert ott kevesebb az "oszlopok" száma, mivel a fájl kisebb mint 50K, ráadásul "100%" esetében ott van egy egyenlőség jel a sebesség és az idő közt, ami megint bonyolít a dolgon.
- A hozzászóláshoz be kell jelentkezni
awk '{gsub(/(.*\. )|( .*[= ])/, " "); print $1, $2}'
- A hozzászóláshoz be kell jelentkezni
A szazalekmezot mondjuk igy:
egrep -o '[0-9]+%'
Ehhez GNU grep kell, mert a tobbi nem ismeri a '-o' opciot (igy a grep csak azt printeli, ami illeszkedett).
A hatralevo ido bonyolultabb, mert a regex konkret formaja nagyban mulik azon, hogy milyen idoformatumban printel a wget: a 2h0m3s elofordulhat mondjuk a kimenetben, vagy az mindig 2h3s lesz?
egrep -o '((([0-9]+d)?[0-9]+h)?[0-9]+m)?[0-9]+s' # 2h0m3s
egrep -o '([0-9]+[dhms])+' # 2h3s
Ha jol latom, a 0 erteku idoegysegeket nem printeli a wget, szoval valoszinuleg a masodik a nyero.
Vagy mindket mezot egyszerre perllel igy:
perl -nE 'say "$1 $2" if m/ ( \d+% ) .*? ( (?:\d+[dhms])+ ) /x'
Avagy a konkret formatumot elnezve a mezok sorveg felol indexelese is hasznalhatonak tunik:
perl -naF'[\s=]+' -E 'say "@F[-3, -1]" if /%/'
Egy kis magyarazat:
a bemenet minden sorat (
-n
)
oszd fel (autosplit,
-a
) mezokre (
@F
tomb),
ugy hogy a mezoket nem csak whitespace (
\s+
),
hanem egyenlosegjelek (
[\s=]+
) is hatarolhatjak,
majd printeld hatulrol a harmadik es az elso mezot (
say "@F[-3, -1]"
),
de csak ha az aktualis sorban szerepel egy szazalekjel (
if /%/
).
A fentiek mindegyike a kovetkezo formatumban mukodik:
cat wget-log | ... | tail -1
Remelem sikerult erthetoen leirnom, hogy ezek mit csinalnak. Ugy altalaban, ha egy szovegfile soraibol ki akarsz gyujteni bizonyos reszeket, akkor erdemes regexekhez nyulni, akar grepet, sedet, awkot vagy perlt hasznalva.
- A hozzászóláshoz be kell jelentkezni
A sed csodakra kepes:)
Ime egy megoldas:
user@gep# cat temp
50K ........ ........ ........ ........ ........ 7% 9.38K 2m52s
100K ........ ........ ........ ........ ........ 11% 17.0K 2m14s
150K ........ ........ ........ ........ ........ 14% 4.61K 2m39s
200K ........ ........ ........ ........ ........ 18% 28.8K 2m9s
250K ........ ........ ........ ........ ........ 22% 7.49K 2m6s
300K ........ ........ ........ ........ ........ 25% 14.3K 1m53s
350K ........ ........ ........ ........ ........ 29% 9.70K 1m46s
400K ........ ........ ........ ........ ........ 33% 10.1K 99s
user@gep# cat temp | sed 's/%.*//;s/\.//g;s/.*\ //'
7
11
14
18
22
25
29
33
user@gep#
- A hozzászóláshoz be kell jelentkezni
lx verziója is egész jó, de a rubasov féle tűnik eddig a legjobbnak.
Már csak 1 gond akadt, hogy a letöltés gprs kapcsolaton történik és ezmiatt kissé lassú a sorok feltöltése, és a "while read line" kissé nyügösen kezeli a dolgot ha a sor még épp nincs kész:
200K ........ ..
200K ........ ........ ..
200K ........ ........ ........ .......
200K ........ ........ ........ ........ ........ 18% 5.62K 2m44s
Szóval a "while read line" -t hogy lehetne kényszeríteni hogy várjon addig amig a sor nem teljes (várjon a sorvége jelekre)?
- A hozzászóláshoz be kell jelentkezni
A legjobb megoldás már elhangzott, azaz a progress.c átírása.
- A hozzászóláshoz be kell jelentkezni