Em primeiro lugar, grep
pesquisa através do conteúdo dos arquivos, ele não procurará por nomes de arquivos. Para isso você quer find
. Ele não tem uma opção para definir o comprimento do nome do arquivo, mas você pode analisar sua saída para obter o que deseja. Aqui estão alguns exemplos que eu executo em um diretório contendo os seguintes arquivos:
$ tree
.
├── a
├── ab
├── abc
├── abcd
└── dir
├── a
├── ab
├── abc
└── abcd
A pesquisa por arquivos neste diretório retorna:
$ find . -type f | sort
./a
./ab
./abc
./abcd
./dir/a
./dir/ab
./dir/abc
./dir/abcd
Portanto, para encontrar os arquivos com um comprimento de X, precisaremos remover o caminho e corresponder apenas aos caracteres após o último /
:
$ find . -type f | grep -P '/.{3}$'
O comando sed
apenas remove o ./
. O -P
flag ativa Perl Compatible Regular Expressions que são necessárias para {n}
, que é uma coisa PCRE e o $
significa "corresponde ao final da string".
Você também pode simplesmente fazer isso:
find . -type f | grep -P '/...$'
Isso é bom para números pequenos. A digitação de 15 pontos para corresponder nomes de arquivo de tamanho 15 não é muito eficiente.
Finalmente, se você quiser ignorar a extensão e corresponder apenas ao nome do arquivo, faça isso (como sugerido @slm):
find . -type f | grep -P '/.{1}\.'
No entanto, isso também encontrará arquivos como a.bo.go
. Isso é melhor se seus nomes de arquivos puderem conter mais de um .
:
find . -type f | grep -P '/.{1}\.[^.]+$'
NOTA: A solução acima pressupõe que você tenha nomes de arquivos relativamente sadios que não contenham novos caracteres de linha, etc. Ele também contará não ignorar espaços em nomes de arquivos ao calcular o comprimento que pode não ser o que você deseja. Se qualquer um deles for um problema, avise-me e atualizarei minha resposta.