Как насчет
#/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
Регулярное выражение проверяет любую цифру ([0-9]
). Числа в фигурных скобках - это количество повторений, поэтому [0-9]{4}
будут соответствовать любым 4 цифрам.
Я бы порекомендовал вам не использовать Bash для этого, но вместо этого найти. Вероятно, это будет быстрее и, безусловно, более переносимо (не все оболочки могут работать с регулярными выражениями):
find -regextype posix-egrep -not -regex '\./[0-9]{4}_[0-9]{4}_[0-9]{2}_[0-9]{2}'