Portál AbcLinuxu, 25. dubna 2024 19:29


Dotaz: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...

15.10.2007 09:20 xolofonicek
Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Přečteno: 3975×
Odpovědět | Admin
Ahoj. Potrebuji u adresare /var/spool/virtual zjistit velikosti podadresaru. To delam prikazem du -sm -h $(find $1 -type d -maxdepth 1 -xdev) | sort -g . To my vypise neco jako:

1,1M ./flibra 1,2M ./jdrahota 1,2M ./jfriedberger 1,2M ./jhavelka 1,4M ./vfriedberger 1,6M ./lindra 1,8M ./ajirova 1,8M ./egrajciar

Tak ted potrebuji podminku. Pokud je velikost adresare vetsi nez rekneme 10MB tak posli mail na treba mail@mail.cz. Nevim jak ten text rozsekat a vyhodnotit. Muzete mi napsat treba klicove prikazy? Trosku me nakopnout :)...

Predem diky...
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.10.2007 09:54 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba zhruba tak:
du -sm -h $(find $1 -maxdepth 1 -xdev -type d) | sort -g |\
while IFS=",press_CTRL+V+TAB_here" read du x username; do
  if [[ "$du" -gt "10" ]]; then
    sendmail mail@mail.cz <<-EOE
        Blah blah $du$x blah "$username".
EOE
done
15.10.2007 09:55 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Zapomněl jsem tam fi jako konec podmínky if
15.10.2007 09:56 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Samozř. jež posílat tucet mailů by byl lepší souhrn (střádat si to do řetězce a poslat nakonec). A určitě je i řada lepších způsobů :)
15.10.2007 11:33 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevim jak ten text rozsekat a vyhodnotit.

Možná by bylo jednodušší otočit pořadí - nejdřív find a teprve pak volat ten du (jenomže tím pak přijdeme o možnost řazení, ale to se dá udělat nakonec). A jak bylo řečeno (tedy napsáno), je lepší poslat souhrn.

#tohle asi nefunguje, ale takhle jsem to myslel
#budeme předpokládat, že v názvu souboru nejsou mezery atp.
find $1 -type d ... | (
while read adresar; do
    velikost=`du -sm $adresar | cut '-d' -f 1`;
    if [ $velikost -gt 10000000 ]; then
        echo "Adresar $adresar je prilis velky ($(( $velikost / 1000 ))KB)"
     fi
 done 
#tímhle přesměrováním si nejsem úplně jist, aby to fungovalo
) >seznam.$$

if [ `wc -l < $seznam.$$` -gt 0 ]; then
   mail ... < $seznam.$$
 fi
rm -f seznam.$$
I am always ready to learn although I do not always like to be taught. (W. Churchill)
23.10.2007 15:24 toxin | skóre: 6
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak teprve ted jsem se k tomu dostal (dovolena). Problem je v tom, ze v bashi temer neumim :(. Ucim se, ale tohle potrebuji hned. Zkousel jsem obe reseni, ale ani jedno mi nefunguje. Ja se v tom kodu nevyznam. Myslite, ze byjste mohli na kod kouknout a upravit ho tak, aby byl funcni? Ja se v tom hrabu uz dve hodiny a akorat mi to pise cim dal tim vice chyb :)... Potrebuji zjistovat velikosti v adresari /var/spool/virtual... Nebo mi popsat jakym zpusobem to funguje - prepinace atd... Na netu neni moc dobrych navodu na skriptovani v bashi :(...

Diky...
23.10.2007 17:50 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
ale ani jedno mi nefunguje

Jo, udělal jsem pár překlepů, ale pokud jsem pochopil zadání správně, tak následující skript už by měl být okay.

#!/bin/sh
#budeme hledat jenom adresáře 
#(šlo by sem doplnit ještě nastavení rodičovského)
find -type d | (
#výstup pošleme kolonou
#a budeme ho číst řádek po řádku
while read adresar; do
    #spočtu souhrnou velikost v bajtech
    #(a vezmu jen 1. sloupeček)
    velikost=`du -sb $adresar | cut -f 1`;
    #jenom ladící výpis (na 1 řádek)
    echo "Zpracovavam adresar $adresar o velikosti 
$velikost" >/dev/stderr
    #je to moc velké?
    if [ $velikost -gt 10000000 ]; then
        #jenom vypíšu (celý subshell je přesměrován!)
        #možná budete chtít upravit jednotky
        echo "Adresar $adresar je prilis velky " \
"($(( $velikost / 1000 ))KB)"
     fi
 done
#a obrovské adresáře si uložím do pomocného souboru
) >seznam.$$

#jestli má pomocný soubor alespoň 1 řádek, tak
if [ `wc -l < seznam.$$` -gt 0 ]; then
   #tady se nastaví třeba odeslání mailem nebo tak něco
   echo "Byly nalezeny veliké adresáře:"
   cat seznam.$$
 fi

#uklidíme po sobě
rm -f seznam.$$
I am always ready to learn although I do not always like to be taught. (W. Churchill)
23.10.2007 18:32 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
(du -sm $(find "$1" -maxdepth 1 -xdev -type d) | sort -g |\
while IFS=" " read velikost adresar; do
  if [[ "$velikost" -gt "10" ]]; then
    echo "Adresar $adresar ma velikost $velikost M, coz je skoro dost."
  fi
done) | sendmail mail@example.com
Spouštět: skript.sh /var/spool/virtual

Ve výrazu IFS=" " je třeba mezeru nahradit fyzickým znakem tabelátoru (lze vložit většinou třeba ctrl+v+tab nebo jinak).

Výraz sendmail mail@example.com lze pro vyzkoušení nahradit výrazem cat.
23.10.2007 19:12 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Tab sa dá vložiť aj takto (v Bash):
IFS=$'\t'
23.10.2007 20:19 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Díky.
26.10.2007 15:39 toxin | skóre: 6
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vsem moc dekuji! Funguje to perfektne :)... Diky!
29.10.2007 11:35 toxin | skóre: 6
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jeste Vas poprosim o malou drobnost. Pro Vas to bude hracka :)...

Rekneme, ze mam promenou jmeno, ve ktere mam nejaky textovy retezec. A ja ted potrebuji k tomu textovemu retezci pripojit dalsi textovy retezec.

treba:

michal a potrebuji k tomu dat treba slovo auto, tzn. vysledek: michalauto

Omluvte me, jsem zacatecnik :(... Jak na to?
29.10.2007 16:51 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
promenna="michalma"
promenna="${promenna}auto"

promenna="michal ma"
promenna="$promenna auto"
31.10.2007 09:02 toxin | skóre: 6
Rozbalit Rozbalit vše Re: Zjisteni velikosti adresaru a vyhodnoceni vyrazu...
Dekuji!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.