Ola

On 4/7/06, Rui Luís Dias <[EMAIL PROTECTED]> wrote:
>  Precisava uma maneira simples e robusta de contar quantos ficheiros de um
>  certo tipo (ex. *.txt *.ref  *.bin ) existem numa directoria e obter o
>  resultado ( nemro deles) para uma variavel. Isto corre de modo recursivo.

Veja este exemplo
$ ls
a.txt  c.txt  e.bin  h.bin  j.mp3  l.mp3  w.mpg  y.exe
b.txt  d.bin  f.bin  i.bin  k.mp3  m.mp3  x.exe

Esta linha pode não ser a mais adequada... mas ela mostra todas as
extenções no diretorio corrente [1]
$ ls | rev | cut -d. -f1 | rev | sort | uniq
bin
exe
mp3
mpg
txt

Aqui faço um laço e uso o grep para contar as ocorrencias.
$ for i in $(ls | rev | cut -d. -f1 | rev | sort | uniq)
do occ=$( grep -c $i <(ls) )
echo "a extencao $i tem ${occ} ocorrencias"
done

a extencao bin tem 5 ocorrencias
a extencao exe tem 2 ocorrencias
a extencao mp3 tem 4 ocorrencias
a extencao mpg tem 1 ocorrencias
a extencao txt tem 3 ocorrencias

Agora só falta fazer um algoritmo pra varrer os diretorios
recursivamente, mas acho que ai vc consegue fazer alguma coisa ;-)

[1] Veja a lógica

Listo os diretorios, quero pegar tudo o que está depois do ultimo ponto
$ ls
a.txt  c.txt  e.bin  h.bin  j.mp3  l.mp3  w.mpg  y.exe
b.txt  d.bin  f.bin  i.bin  k.mp3  m.mp3  x.exe

Inverto as strings, agora quero pegar tudo o que esta ate o primero ponto
$ ls | rev
txt.a
txt.b
txt.c
nib.d
nib.e
nib.f
nib.h
nib.i
3pm.j
3pm.k
3pm.l
3pm.m
gpm.w
exe.x
exe.y

Um cut faz isso
$ ls | rev | cut -d. -f1
txt
txt
txt
nib
nib
nib
nib
nib
3pm
3pm
3pm
3pm
gpm
exe
exe

Agora inverto de novo -- elas ficam certinhas
$ ls | rev | cut -d. -f1 | rev
txt
txt
txt
bin
bin
bin
bin
bin
mp3
mp3
mp3
mp3
mpg
exe
exe

Ordeno-as
$ ls | rev | cut -d. -f1 | rev | sort
bin
bin
bin
bin
bin
exe
exe
mp3
mp3
mp3
mp3
mpg
txt
txt
txt

Depois de ordenadas, o uniq funciona bem melhor
$ ls | rev | cut -d. -f1 | rev | sort | uniq
bin
exe
mp3
mpg
txt

Tcharam ! 100% 'shell'
--
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a