Regulärer Ausdruck in „Find“, um nur zu lokalisieren

Regulärer Ausdruck in „Find“, um nur zu lokalisieren

Ich habe eine CSV-Datei (products.csv) mit Produktnummern

$ cat products.csv | head -3
2.20
2.21
2.22

in einem anderen Verzeichnis habe ich Tausende von Produktbildern in Unterverzeichnissen.

Ich muss Produktbilder basierend auf der Produktnummer aus der Datei products.csv finden.

Ich habe ein einfaches Bash-Skript geschrieben, um sie zu finden:

#!/bin/sh

PRODUCTS_FOLDER="products";
PRODUCTS="products.csv";

for x in `cat $PRODUCTS`;
do
    FILE=`find $PRODUCTS_FOLDER -follow -iname "$x*"`;
    if [ -n "$FILE" ]; then
            echo "Product $x found:";
            echo "--> $FILE <--";
    else
            echo "Product $x not found";
    fi
    echo "-----------------------------------";
done

aber es macht nicht genau das, was ich brauche. In den Ergebnissen kann ich Folgendes finden:

-----------------------------------
Product 14.144 found:
--> products/Buchzeichen/14.144_Interlaken_sortiert.jpg
products/Motive/14.1448.jpg
products/Motive/14.1445.jpg
products/Motive/14.1449.jpg
products/Motive/14.1446.jpg <--
-----------------------------------

Das richtige Ergebnis sollte nur Bilder mit dieser Nummer (14.444) ohne 14.1448, 14.1445, 14.1449, 14.1446 enthalten

Welchen regulären Ausdruck muss ich in „Find“ verwenden, um das erwartete Ergebnis zu erhalten? Oder gibt es vielleicht eine andere Möglichkeit, das Problem zu lösen?

Ihre Ideen oder Vorschläge sind uns sehr willkommen

Antwort1

Der folgende reguläre Ausdruck sollte funktionieren:

-regex ".*/$x[^0-9].*"

Es enthält die Zahl direkt nach dem Schrägstrich, gefolgt von einer Nicht-Zahl.

verwandte Informationen