Verificando nomes de arquivos dentro de um diretório com expressões regulares

Verificando nomes de arquivos dentro de um diretório com expressões regulares

Eu tenho uma lista de arquivos dentro de um diretório e quero criar um script bash que use uma expressão regular para verificar se cada nome de arquivo dentro dele tem esta sintaxe:

xxxx_xxxx_xx_xx

Onde x são números.

Edit: eu só preciso com o regex

Responder1

Que tal

#/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

A expressão regular verifica qualquer dígito ( [0-9]). Os números entre chaves são o número de repetições, portanto [0-9]{4}corresponderão a quaisquer 4 dígitos.

Eu recomendaria que você não usasse o bash para isso, mas sim o find. Provavelmente será mais rápido e certamente mais portátil (nem todos os shells podem lidar com expressões regulares):

find -regextype posix-egrep -not -regex '\./[0-9]{4}_[0-9]{4}_[0-9]{2}_[0-9]{2}'

Responder2

É desajeitado, mas deve ser muito portátil:

#!/bin/sh
para x em *
fazer
    caso "$x" em
        [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 corresponde"
            ;;
        *)
            echo "$x não corresponde"
    esac
feito
#                       E, para ser irritantemente completo,
para x em .*
fazer
    echo "$x não corresponde"
feito

informação relacionada