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
-
Po procisteni svée sbirky hudby jsem potreboval automaticky smazat prazdne adresare.
Nejak mi nefunguje tento skript:
#!/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 ....
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?
-
if se zapisuje takto:
if test x = 0; then dosomething; fi - chybí ti tam to ; then
-
## najde prazdne adresare v $kde a smaze je
find $kde -type d -empty -exec rm -rv {} \;
-
## 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:
#!/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
ged@ged-laptop:~/data/mp3$ bash prazdne
prazdne: line 3: test: too many arguments
-
man test, tohle je ptakovina : test -s "$F" -a `du "$F" | awk '{print $1}'` = "0"
-
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?
-
# 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
#
-
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! ;)