[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Listar varios tipos de ficheiros
From: |
Tiago Barcellos Peczenyj |
Subject: |
Re: [shell-script] Listar varios tipos de ficheiros |
Date: |
Fri, 7 Apr 2006 20:29:21 -0300 |
Ola
On 4/7/06, Rui Luís Dias <address@hidden> 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