Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Uran 10 Srpna 2009, 13:48:15

Název: prazdne adresare a jejich smazani
Přispěvatel: Uran 10 Srpna 2009, 13:48:15
Po procisteni svée sbirky hudby jsem potreboval automaticky smazat prazdne adresare.

Nejak mi nefunguje tento skript:

Kód: [Vybrat]
#!/bin/bash
find . -type d | while read F; do
if [ -s "$F" ] && [ `du  "$F" | awk '{print $1}'` = "0" ]

echo "$F"
fi
done
Misto echo "$F" pak samozrejme hodim mv ....
Kód: [Vybrat]
prazdne: line 6: syntax error near unexpected token `fi'
prazdne: line 6: `fi'

Nakopne me nekdo kde je ta chyba pripadne zdali neexistuje (urcite ano) nejake jednodusi reseni?
Název: Re: prazdne adresare a jejich smazani
Přispěvatel: qUAKER 10 Srpna 2009, 13:50:00
if se zapisuje takto:

if test x = 0; then dosomething; fi - chybí ti tam to ; then
Název: Re: prazdne adresare a jejich smazani
Přispěvatel: nettezzaumana 10 Srpna 2009, 13:54:26
Kód: [Vybrat]
## najde prazdne adresare v $kde a smaze je
find $kde -type d -empty -exec rm -rv {} \;
Název: Re: prazdne adresare a jejich smazani
Přispěvatel: Uran 10 Srpna 2009, 13:57:16
Kód: [Vybrat]
## najde prazdne adresare v $kde a smaze je
find $kde -type d -empty -exec rm -rv {} \;

Vyzkousim jen mi nejde do hlavy proc nefunguje tohle:

Kód: [Vybrat]
#!/bin/bash
find . -type d | while read F; do
if test -s "$F" -a `du  "$F" | awk '{print $1}'` = "0"; then echo "$F"
fi
done

Kód: [Vybrat]
ged@ged-laptop:~/data/mp3$ bash prazdne
prazdne: line 3: test: too many arguments
Název: Re: prazdne adresare a jejich smazani
Přispěvatel: nettezzaumana 10 Srpna 2009, 13:59:22
man test, tohle je ptakovina : test -s "$F" -a `du  "$F" | awk '{print $1}'` = "0"
Název: Re: prazdne adresare a jejich smazani
Přispěvatel: Uran 10 Srpna 2009, 14:05:19
man test, tohle je ptakovina : test -s "$F" -a `du  "$F" | awk '{print $1}'` = "0"

Asi je to pekny paskvil ale nejak mi porad nedochazi proc kdyz v man najdu, ze "EXPRESSION1 -a EXPRESSION2  both EXPRESSION1 and EXPRESSION2 are true" a "`du  "$F" | awk '{print $1}'` = "0"" by mi melo porovnat velikost slozky a pokud je rovna nule tak to vyhodnotit jako ok
..
Kde mam chybu?
Název: Re: prazdne adresare a jejich smazani
Přispěvatel: nettezzaumana 10 Srpna 2009, 14:17:29
Kód: [Vybrat]
# mkdir bar
# set -x
# x=bar test -s $x -a `du  $x | awk '{print $1}'` = "0"
++ du
++ awk '{print $1}'
+ x=bar
+ test -s -a 175835 550 0 0 0 21432 12 0 789 8 4 0 744 12 4 0 0 1561 1573 769 4 4 0 760 12 4 0 0 1553 1565 769 4 4 0 760 12 4 0 0 1553 1565 4706 537 4 4 0 656 12 5802 0 0 0 7014 7026 7030 448 16 8 0 1517 16 4 0 0 0 0 4 2013 2157 2825 16 8 0 3578 144 4 0 0 0 6575 6851 2869 16 4 0 5712 104 4 0 0 0 8708 9000 18035 320 4 4 0 440 12 4 0 0 0 784 796 800 764 4 4 0 1429 12 4444 0 0 6657 6669 6673 148481 1041 4544 4536 4536 1529 164695 1041 4544 4536 4536 1569 16242 0 48 48 218872 0 0 12 0 0 0 0 0 2 0 8 4 0 0 0 0 0 0 0 45 11671 11679 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 8 4 0 0 0 0 0 0 0 0 0 38396 0 0 0 4 23 52 8 4 0 8 8 0 0 0 0 9 0 4 0 4 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 409 1021 1430 1514 0 4 4 0 0 0 192 1 193 0 0 8 0 0 0 0 0 0 0 0 247 0 0 0 168 20 164 0 12 462 846 846 168 20 164 0 12 462 846 846 168 20 164 0 12 462 846 846 168 20 164 0 12 462 846 846 445 24 609 0 48 739 1896 1896 360 24 601 0 48 775 1848 1848 360 24 601 0 48 775 1848 1848 360 24 601 0 48 775 1848 1848 360 24 601 0 48 775 1848 1848 0 0 16 32 0 0 0 121 145 105 0 0 0 0 0 596002 = 0
bash: test: too many arguments
# set +x
+ set +x
#
Název: Re: prazdne adresare a jejich smazani
Přispěvatel: Uran 11 Srpna 2009, 06:17:57
Dekuji uz je  mi to jasne.

Jinak tahle zkusenost me naucila nespolehat jen na jeden zdroj informaci, protoze v  jinak uzasne knize od M. G. Sobella - Mistroství v Linuxu ... prave ta volba -empty u find neni uvedena :(
man, man, man! ;)