Verificando os nomes dos arquivos dentro de um diretório com Expressões Regulares

5

Eu tenho uma lista de arquivos dentro de um diretório e eu quero fazer um script bash que usa uma expressão regular para verificar se todo nome de arquivo dentro dele tem essa sintaxe:

xxxx_xxxx_xx_xx

Onde x são números.

Edit: eu só preciso com o regex

    
por Federico Ponzi 11.07.2014 / 12:04

2 respostas

8

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 nas chaves são o número de repetições, então [0-9]{4} corresponderá a qualquer 4 dígitos.

Eu recomendo que você não use o bash para isso, mas encontre em seu lugar. Ele 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}'
    
por 11.07.2014 / 12:33
1

É desajeitado, mas isso deve ser muito portátil:

#!/bin/sh
for x in *
do
    case "$x" in
        [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 matches"
            ;;
        *)
            echo "$x  doesn’t match"
    esac
done
#                       And, to be annoyingly complete,
for x in .*
do
    echo "$x  doesn’t match"
done
    
por 11.07.2014 / 16:52

Tags