Comprobar nombres de archivos dentro de un directorio con expresiones regulares

Comprobar nombres de archivos dentro de un directorio con expresiones regulares

Tengo una lista de archivos dentro de un directorio y quiero crear un script bash que use una expresión regular para verificar si cada nombre de archivo dentro tiene esta sintaxis:

xxxx_xxxx_xx_xx

Donde x son números.

Editar: solo necesito con la expresión regular

Respuesta1

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 busca cualquier dígito ( [0-9]). Los números entre llaves son el número de repeticiones, por lo que [0-9]{4}coincidirán con 4 dígitos cualesquiera.

Te recomendaría que no uses bash para esto, sino que lo busques. Probablemente será más rápido y ciertamente 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}'

Respuesta2

Es complicado, pero debería ser muy portátil:

#!/bin/sh
para x en *
hacer
    caso "$x" en
        [0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]_[0-9][0- 9]_[0-9][0-9])
            echo "$x coincidencias"
            ;;
        *)
            echo "$x no coincide"
    esac
hecho
#                       Y, para ser irritantemente completo,
para x en .*
hacer
    echo "$x no coincide"
hecho

información relacionada