Überprüfen von Dateinamen in einem Verzeichnis mit regulären Ausdrücken

Überprüfen von Dateinamen in einem Verzeichnis mit regulären Ausdrücken

Ich habe eine Liste von Dateien in einem Verzeichnis und möchte ein Bash-Skript erstellen, das mithilfe eines regulären Ausdrucks überprüft, ob alle darin enthaltenen Dateinamen diese Syntax haben:

xxxx_xxxx_xx_xx

Wobei x Zahlen sind.

Bearbeiten: Ich brauche nur den regulären Ausdruck

Antwort1

Wie wäre es mit

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

Der reguläre Ausdruck sucht nach beliebigen Ziffern ( [0-9]). Die Zahlen in geschweiften Klammern geben die Anzahl der Wiederholungen an und [0-9]{4}stimmen daher mit allen 4 Ziffern überein.

Ich würde empfehlen, hierfür nicht bash, sondern find zu verwenden. Das ist wahrscheinlich schneller und sicherlich portabler (nicht alle Shells können mit regulären Ausdrücken umgehen):

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

Antwort2

Es ist klobig, sollte aber sehr portabel sein:

#!/bin/sh
für x in *
Tun
    Fall "$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 Übereinstimmungen"
            ;;
        *)
            echo "$x stimmt nicht überein"
    esac
Erledigt
#                       Und um ärgerlich vollständig zu sein:
für x in .*
Tun
    echo "$x stimmt nicht überein"
Erledigt

verwandte Informationen