Quero contar o número de arquivos para cada extensão em um diretório, bem como os arquivos sem extensão.
Eu tentei algumas opções, mas ainda não encontrei uma solução funcional:
find "$folder" -type f | sed 's/.*\.//' | sort | uniq -c
é uma opção, mas não funciona se não houver extensão de arquivo. Preciso saber quantos arquivos não têm extensão.Eu também tentei um loop de localização em uma matriz e, em seguida, somar os resultados, mas nesse momento esse código gera um erro de variável não declarado, mas apenas fora do loop:
declare -a arr arr=() echo ${arr[@]}
Isso lança uma variável não declarada, assim como quando o loop de busca é concluído.
command-line
find
extension
menino trator
fonte
fonte
ext = [ f.split('.')[-1] for f in os.listdir('./') ]
Thatll torná-lo linhas par mais curto e talvez mais PythonicSe você possui o GNU awk, pode fazer algo como
ou seja, construir / incrementar uma matriz associativa digitada no último
.
campo separado ou alguma sequência fixa arbitrária, como(none)
se não houver extensão.mawk
parece não permitir um separador de registro de byte nulo - você pode usarmawk
o separador de nova linha padrão se tiver certeza de que não precisa lidar com novas linhas nos nomes de arquivos:fonte
Com o básico
/bin/sh
ou mesmobash
a tarefa, pode ser um pouco difícil, mas como você pode ver em outras respostas, as ferramentas que podem trabalhar com dados agregados podem lidar com essa tarefa de maneira particularmente fácil. Uma dessas ferramentas seria osqlite
banco de dados.O processo muito simples de usar o
sqlite
banco de dados seria criar um.csv
arquivo com dois campos: nome e extensão do arquivo. Mais tardesqlite
pode usar declaração agregado simplesCOUNT()
comGROUP BY ext
para realizar a contagem de arquivos com base no campo de extensãofonte
files_tb
acho que a tabela está sendo referenciada, mas as colunas da tabela não estão definidas em nenhum lugar que eu possa ver?printf
faz. E o SQLite assumirá o padrão de tratar a primeira linha do arquivo csv como nomes de colunas.Usando o PowerShell, se for uma opção:
ou menor, usando aliases:
fonte