Portál AbcLinuxu, 16. července 2025 20:56


Dotaz: Bash a test existence souboru s určitou příponou

David Watzke avatar 27.2.2006 16:30 David Watzke | skóre: 74 | blog: Blog... | Praha
Bash a test existence souboru s určitou příponou
Přečteno: 1187×
Odpovědět | Admin
Ahoj.. potřebuju ve skriptu otestovat jestli je v daném adresáři nějaký soubor s příponou třeba .[oO][gG][gG]. Napsal jsem teda tohle:
up() { tr a-z A-Z; }
check() { for F in *.[${F:0:1}$(echo ${F:0:1} | \
up)][${F:1:1}$(echo ${F:1:1} | \
up)][${F:2:2}$(echo ${F:2:2} | up)]; do [ ! -z "$F" ] && \
break; done; }
a spustím
check ogg
jenže to vrací pořád nulu ať už tam ogg je, nebo ne. Asi by to šlo jen poladit a nebyl by problém, jenže mi to přijde trošku extrémismus na takovou trivialitu. Samozřejmě mě napadlo třeba ls *.[oO][gG][gG], ale co kdyby jich tam bylo hafo, že jo...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.2.2006 16:44 kamco | skóre: 2
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Odpovědět | | Sbalit | Link | Blokovat | Admin
a nieco take ze

for i in *; do
  if [ -n "`echo $i | grep -w -i ".ogg$"`" ]; then
    pocet=$[ $pocet + 1 ]
  fi;
done;

by nefungovalo?
David Watzke avatar 27.2.2006 16:49 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Ne. Stačí mi exit status... navíc tohle ukazuje nesmysly. V adresáři kde je 22 oggů to ukáže 2. A není to o nic míň prasácký než to moje :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
27.2.2006 17:15 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Odpovědět | | Sbalit | Link | Blokovat | Admin
[ivok@zero ~]$ ls *.avi 2>/dev/null >/dev/null
[ivok@zero ~]$ echo $?
0
[ivok@zero ~]$ ls *.ogg 2>/dev/null >/dev/null
[ivok@zero ~]$ echo $?
1
27.2.2006 17:17 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
To zas nefunguje na adresáře :-(
David Watzke avatar 27.2.2006 19:33 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
A na spousty souborů... :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
27.2.2006 18:03 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je tam hned několik záludností. *.ogg se expanduje na neprázdný řetězec *.ogg v případě, že soubory neexistují. Při přiřazení do proměné se nullglob neuplatní takže se to musí prohnat přes echo. No a v neposlední řadě je nocaseglob dost užitečný přepínač a uděláme to v subprocesu, aby jsme si nezměnili aktuální nastavení. Třeba nějak takhle:
check() {
  local a="$(shopt -s nocaseglob nullglob; echo *".$1")";
  test -n "$a";
}
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
27.2.2006 18:07 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Co je ještě vtipné, tak když si necháte vypsat obsah proměnné echo $a tak se provede globbing a tak je při ladění potřeba si to vypsat například pomocí echo "x${a}x" Zkrátka samé radosti :-) To byl ale vypečený úkol.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
27.2.2006 18:08 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Ech, zapomenuté středníky :-)
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
David Watzke avatar 27.2.2006 19:35 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Díky... docela nářez.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 27.2.2006 20:46 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Ještě něco... ono to asi nepůjde aby se koukl po *.[oO][gG][gG], že? Takhle se podívá jen na to, co mu přesně zadám ... a jediný co mě napadá je hackovat s check ogg, check Ogg... a to je moc prasáčký i na mě...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 27.2.2006 20:47 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
*prasácký :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
28.2.2006 09:12 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Ale vždyť ono to kouká po *.[oO][gG][gG]. Na co je tam asi to shopt -s nocaseglob? To si to nemlžete zkusit než něco plácnete?
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
David Watzke avatar 28.2.2006 17:01 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Omlouvám se, opravdu mě to nenapadlo... :-(
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
28.2.2006 09:17 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
$ check() { test -n "$(shopt -s nocaseglob nullglob; echo*".$1")"; }
$ touch a.oGg
$ check ogg && echo OK || echo BAD
OK
$ rm a.oGg 
$ check ogg && echo OK || echo BAD
BAD
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
28.2.2006 08:47 jones
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Odpovědět | | Sbalit | Link | Blokovat | Admin
find ./ -type f -maxdepth 1 -name "*.[oO][gG][gG]"
28.2.2006 09:19 Tomik Parizek
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
co takhle?

find . -type f -maxdepth 1 -iname "*.ogg"
David Watzke avatar 28.2.2006 17:06 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash a test existence souboru s určitou příponou
Díky, tohle mě nenapadlo. Jen poznámka, -maxdepth musí být před -type, protože jinak:
find: warning: you have specified the -maxdepth option after a
 non-option argument -type, but options are not positional (-maxdepth
 affects tests specified before it as well as those specified after
 it).  Please specify options before other arguments.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon

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.