Contar e identificar os tipos de ficheiros presentes num directrório

1. Contar e identificar os tipos de ficheiros presentes num directrório

Ede
ede_linux

(usa Ubuntu)

Enviado em 15/04/2017 - 22:56h

Olá a todos,

Pretendo criar um script que me informe quantos ficheiros de determinado tipo eu tenho num servidor. Não sei que tipos de ficheiros é que o servidor tem, nem quantos ficheiros tem de determinado tipo.
O resultado seria algo deste gênero:

pdf: 1550 files
odt: 500 files
mp4 400 files
iso 40 files
zip 400 files

Mais uma vez relembro que não sei que tipos de ficheiros é que tenho no servidor. O objectivo é mesmo descobrir que tipos de ficheiros é que tenho e que quantidades existem!

Pretendo aprender, por isso, de momento, agradeço a ajuda na montagem do algoritmo.
Acho que será mais ou menos assim:


1-Varrer todos os diretórios de maneira recursiva a partir de /home/user;
2-Que tipos de ficheiros existem?
3-O tipo é novo? Se sim, guardar e contar um;
4-Senão, contar dois;
5-Repetir;


Por exemplo, a primeira vez que aparecesse o tipo pdf, iria executar o passo 3. Mas nas segunda já saltava para o passo 4.

O que acham?
Obrigado




  


2. Re: Contar e identificar os tipos de ficheiros presentes num directrório

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/04/2017 - 00:24h

Que tal assim?

MIME type
find -type f -exec file -ib {} \; | sort | awk '{count[$1]++}END{for(j in count) print j,"("count[j]" occurences)"}' 

Extenção
find -type f | sed -n 's/..*\.//p' | sort -f | uniq -ic | sort 



3. Re: Contar e identificar os tipos de ficheiros presentes num directrório

Ede
ede_linux

(usa Ubuntu)

Enviado em 16/04/2017 - 08:00h


find -type f -exec file -ib {} \; | sort | awk '{count[$1]++}END{for(j in count) print j,"("count[j]" occurences)"}'


Pelo que percebo estão 3 comandos:
find;
sort;
awk;


Parametros do find:
-type f: regular file

-exec: Show diagnostic information relating to -exec, -execdir,
-ok and -okdir

file: Runs `file' on every file in or below the current directory. Notice
that the braces are enclosed in single quote marks to protect them from
interpretation as shell script punctuation. The semicolon is similarly
protected by the use of a backslash, though single quotes could have
been used in that case also.


-ib: não sei

{}: não sei

\: não sei


Parametros do sort:
sort: sort lines of text files

Não percebo o porque disto.

Parametros do awk
awk: pattern scanning and text processing language

Aqui percebo que seja a parte do algoritmo:

'{count[$1]++}END{for(j in count) print j,"("count[j]" occurences)"}'

O que percebo:
1-Como find encontrar tudo o que seja ficheiro;
2-Como o sort, ordenar o que foi encontrado no find;
3-Com o awk manipular a saída;

O que acha do meu estudo?


4. Re: Contar e identificar os tipos de ficheiros presentes num directrório

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/04/2017 - 08:54h

Será que compensa usar wc -l para contar as linhas/arquivos?

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: Contar e identificar os tipos de ficheiros presentes num directrório

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/04/2017 - 10:20h

ede_linux escreveu:
O que acha do meu estudo?


De fato o "sort" tava sobrando aí, pode retirar! ;)
Ou melhor, pode ser colocado no final de tudo para deixar a saída mais organizada:
find -type f -exec file -ib {} \; | awk '{count[$1]++}END{for(j in count) print j,"("count[j]" occurences)"}' | sort 

find = comando para procurar coisas
-type f = opção do find para procurar só arquivos
-exec = opção do find para executar outros comandos
file = comando para identificar o tipo de arquivo
-ib = opções do file para mostrar a saída reduzida (b) como tipo MIME (i)
{} = saída padrão do que foi encontrado pelo file
\; = finaliza o comando exec
| = direciona a saída de um comando para outro
awk ... = faz a contagem e imprime o resultado




6. Re: Contar e identificar os tipos de ficheiros presentes num directrório

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 16/04/2017 - 12:09h

ede_linux escreveu:

Olá a todos,

Pretendo criar um script que me informe quantos ficheiros de determinado tipo eu tenho num servidor. Não sei que tipos de ficheiros é que o servidor tem, nem quantos ficheiros tem de determinado tipo.
O resultado seria algo deste gênero:

pdf: 1550 files
odt: 500 files
mp4 400 files
iso 40 files
zip 400 files

Mais uma vez relembro que não sei que tipos de ficheiros é que tenho no servidor. O objectivo é mesmo descobrir que tipos de ficheiros é que tenho e que quantidades existem!

Pretendo aprender, por isso, de momento, agradeço a ajuda na montagem do algoritmo.
Acho que será mais ou menos assim:


1-Varrer todos os diretórios de maneira recursiva a partir de /home/user;
2-Que tipos de ficheiros existem?
3-O tipo é novo? Se sim, guardar e contar um;
4-Senão, contar dois;
5-Repetir;


Por exemplo, a primeira vez que aparecesse o tipo pdf, iria executar o passo 3. Mas nas segunda já saltava para o passo 4.

O que acham?
Obrigado



Boa tarde Ede.
Segue . . .
Conta os tipos de arquivo, mostra a % de cada tipo e o total.

ls -1R *.* | awk -F"." '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}END{print "\nTOTAL = " NR}' | column -c3 -s " " -t | sort -nr 

SAíDA:
174 87.4372% html
14 7.03518% txt
4 2.01005% HTML
3 1.50754% css
2 1.00503% htm
1 0.502513% png
1 0.502513% js
TOTAL = 199

Att.:
Marcelo Oliver








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts