Você pode usar o comando find
com -regex
test
$ find /path/to/folder -regextype posix-basic -regex '.*/.\{5,\}'
ou
$ find /path/to/folder -regextype posix-extended -regex '.*/.{5,}'
Observe que -regex
é uma correspondência de caminho em vez de uma correspondência de arquivo - portanto, você precisa igualar também o líder .*/
, antes do caractere 5+ nome do arquivo
Alternativamente, para uma solução bash pura, você poderia habilitar globbing de shell estendido e então usar o padrão !(@(?|??|???|????))
significando 'qualquer coisa que não corresponda a um ou dois ou três ou quatro caracteres'
$ shopt -s extglob
$ ls -d /path/to/folder/!(@(?|??|???|????))
Se você deseja incluir subdiretórios, também é possível ativar a opção globstar
e adicionar um curinga **
, por exemplo
$ shopt -s extglob globstar
$ ls -d /path/to/folder/**/!(@(?|??|???|????))
por exemplo
$ ls -d **/!(@(?|??|???|????))
abcde abcdef abcdefg subdir subdir/abcde subdir/abcdef subdir/abcdefg
enquanto as correspondências não invertidas (arquivos menores que 5 caracteres) são
$ ls -d **/@(?|??|???|????)
a ab abc abcd subdir/a subdir/ab subdir/abc subdir/abcd
Para remover as opções depois, use
$ shopt -u extglob globstar