Portál AbcLinuxu, 7. prosince 2025 12:47


Dotaz: Pomoc s prikazem for v bashi

1.8.2003 13:45 Martin
Pomoc s prikazem for v bashi
Přečteno: 165×
Odpovědět | Admin
jak muzu nacist nazvy adresaru do seznamu, ktery bude pouzit ve foru, tak aby se zachovaly mezery v nazvech.

cili modifikovat nejak

for name in `find . -type d`

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

Odpovědi

1.8.2003 14:13 Roman Vasicek
Rozbalit Rozbalit vše Pomoc s prikazem for v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin

Co to zkusit treba takto?

find . -type d | (
  read DIRNAME;
  while [ -n "$DIRNAME" ]; do
    ...zpracovani...
    read DIRNAME;
  done
)
1.8.2003 14:14 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Pomoc s prikazem for v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
doporučuji použít find ... -print0 | xargs -0 (to je nejbezpečnější), pokud to jde, nebo -exec jinak to umím jen přes pole
declare -a a
IFS=$'\n' a=($(find . -type d))
for f in "${a[@]}"; do
   ...
done
i když asi to nějakým trikem s IFS půjde i přímo
1.8.2003 14:59 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Pomoc s prikazem for v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud by šlo jen o mezery, tak by samozřejmě šlo
for name in `find . -type d | sed 's/ /\\ /g'`
ale to by jsi musel udělat pro všechny escape věci co se můžou vyskytnout v názvu jako *, ?, ;, \, <, >, $ atd a to je myslím poněkud nepratické a navíc expanze pomocí `` dělá escape " a ' (trochu pakárna, že). Mnohem bezpečnější je všechno udělat ve findu, pokud to jde (což není asi tento případ) a nebo pokud není potřeba aby to bylo rekurzivně do podadresářů udělat to pomocí bashové expanze.
for name in *
do
  if [ -d "$name" -a ! -h "$name" ]
  then
    co chceš udělat s adresářem, ale nezapomeň to dát do uvozovek
  fi
done
a nebo si to udělat i rekurzí
for name in $1${1:+/}*
do
  if [ -d "$name" -a ! -h "$name" ]
  then
    echo "$name"
    $0 "$name"
  fi
done
Ale jak tak přemýšlím, na co to chcete použít, tak nakonec se při vytváření href budete muset ten escape udělat, ale na url. Jo a ještě je jak na potvoru problém se skrytými soubory, které zas find najde, ale * expanze ne. pak by to vypadalo asi takhle
for name in $1${1:+/}* $1${1:+/}.[^.]*
do
  if [ -d "$name" -a ! -h "$name" ]
  then
    echo "$name"
    $0 "$name"
  fi
done
Uf.
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é.
1.8.2003 16:03 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Pomoc s prikazem for v bashi
rekurze v shellu: nikdy! xargs rulez! snadnardní prográmky z coreutils jsou udělané tak, aby se člověk nemusel patlat s cykly a rekurzí, prostě vygeneruji seznam, proženu ho několika rourami a na konci to pošlu do |xargs ..., |sh nebo něčeho podobného (s url a href to nechápu -- asi proběhla i nějaká soukromá diskuse, které jsem nebyl svědkem, takže k tomu nemohu nic říci...)
1.8.2003 16:33 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Pomoc s prikazem for v bashi
S href moje vlčí mlha, prosím ignorujte :-)
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é.
1.8.2003 15:10 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Pomoc s prikazem for v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
A cenu za eleganci vyhrává pan Vašíček, čisté, elegantní a nečeká to až se dokončí ten find a tedy na čtení z disku, paralelení zpracování, nádhera ;-)
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é.
1.8.2003 17:16 Martin
Rozbalit Rozbalit vše Pomoc s prikazem for v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Diky vsem a odpoved

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.