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