Qué tal si
#/usr/bin/env bash
for f in *
do
[[ $f =~ [0-9]{4}_[0-9]{4}_[0-9]{2}_[0-9]{2} ]] ||
echo "File $f does not match"
done
La expresión regular verifica cualquier dígito ( [0-9]
). Los números entre llaves son el número de repeticiones, por [0-9]{4}
lo que coincidirán con 4 dígitos.
Recomendaría que no use bash para esto, sino que busque en su lugar. Probablemente será más rápido, y ciertamente es más portátil (no todos los shells pueden manejar expresiones regulares):
find -regextype posix-egrep -not -regex '\./[0-9]{4}_[0-9]{4}_[0-9]{2}_[0-9]{2}'
find
comando se rompa, pero sigo creyendo (en principios generales) que la expresión regular probablemente debería citarse, por seguridad.