No Bash, o seguinte funciona de forma não recursiva. Você pode, claro, colocá-lo em uma função:
shopt -q nullglob || restore=1 && shopt -s nullglob
var=(*[0-9][0-9])
echo ${#var[@]}
[ 1 -eq "$restore" ] && shopt -u nullglob
Isso funciona mesmo se você tiver nomes de arquivos malucos. Se os nomes dos seus arquivos não são loucos, então você pode usar essa abordagem ls
:
ls -d1b *[0-9][0-9] | wc -l
Observe que os sinalizadores que usei para ls
são diferentes: -d
fará a lista do diretório, não seu conteúdo (se você tivesse um diretório chamado something00
por exemplo); -1
diz usar uma única coluna para saída; -b
escapa nomes de arquivos, o que fará com que a maioria dos nomes de arquivos malucos funcionem.
Ambos incluirão o diretório chamado something00
na contagem. Se você precisa apenas de arquivos ou recursão, find
é o que você está procurando. Isso pesquisará o diretório atual ( .
), recursivamente, somente para arquivos ( -type f
):
find . -type f -name '*[0-9][0-9]' -printf 'f\n' | wc -l
Observe o uso de -printf
para imprimir apenas a letra f
em vez do nome do arquivo. Você só quer contá-los, desta forma, é imune a nomes de arquivos malucos.