Isso testa todos os arquivos no diretório atual, usando o operador [[ do bash, em relação ao padrão:
- início da string
^ - 3 dígitos
-
- - 8 dígitos
-
- - 9 dígitos
-
.pdf - fim da string
$ - que os 8 dígitos do meio são avaliados para uma data válida de acordo com a data do GNU
Você pode ajustar as suposições acima com bastante facilidade.
for f in *
do
[[ $f =~ ^([0-9][0-9][0-9])-([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])-([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]).pdf$ ]] &&
date -d ${BASH_REMATCH[2]} &>/dev/null &&
echo Valid: "$f"
done