Portál AbcLinuxu, 12. května 2025 11:43
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
fi
jako konec podmínky if
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.$$
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.$$
(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.comSpouš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
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.