Usando globs estendidos:
shopt -s extglob
printf '%s\n' !([[:digit:][:upper:]]?([[:digit:][:upper:]])_[[:digit:]][[:digit:]][[:digit:]][[:digit:]]_+([[:alnum:]]).dat)
isso imprimirá todos os nomes de arquivos / diretórios que não corresponderem ( !
) [[:digit:][:upper:]]
seguido por zero ou um [[:digit:][:upper:]]
seguido por 4 [[:digit:]]
entre _
s e, em seguida, um ou mais [[:alnum:]]
antes da extensão .dat
.
Se você quiser pesquisar recursivamente:
shopt -s globstar
shopt -s extglob
printf '%s\n' **/!([[:digit:][:upper:]]?([[:digit:][:upper:]])_[[:digit:]][[:digit:]][[:digit:]][[:digit:]]_+([[:alnum:]]).dat)
Como alternativa, com gnu find
(você pode usar um regex):
find . -regextype egrep ! -regex '.*/[[:digit:][:upper:]]{1,2}_[[:digit:]]{4}_[[:alnum:]]+\.dat$'