shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Listar varios tipos de ficheiros


From: Flavio Junior
Subject: Re: [shell-script] Listar varios tipos de ficheiros
Date: Fri, 7 Apr 2006 21:05:59 -0300

Eu achei mto doida a solução..

Eu notei que se ouver diretorios abaixo do diretorio corrente, ele
pega como ocorrencia tambem, corrigi isso usando o awk, ficando:

for i in $(ls | awk -F. '{print $2}' | sort | uniq);
         do occ=$(grep -c $i <(ls) );
              echo "a extensao $i tem ${occ} occ";
done

Talvez ainda nao seja a melhor solução, mas tae a minha apresentada.
Agora eu nao entendi bem o que voce queria fazer, se é isso mesmo.

Talvez o que voce queira fazer seja mais facil utilizando a, quase
linguagem, find :)

Por exemplo:

$ find . -iname "*.bin" -or -iname "*.txt" -exec blah balh balh

Depende mto do que voce quer fazer.. se estas respostas nao ajudarem,
poste mais informacoes sobre sua necessidade..

T+

Flávio do Carmo Junior aka scrat

On 4/7/06, Tiago Barcellos Peczenyj <address@hidden> wrote:
> 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
>
>
> ---------------------------------------------------------------------
> 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: address@hidden
> ---------------------------------------------------------------------
> 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
>
>
>
>
>
>
>
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]