
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.