
У меня есть CSV-файл (products.csv) с номерами продуктов.
$ cat products.csv | head -3
2.20
2.21
2.22
в другом каталоге у меня в подкаталогах находятся тысячи изображений продуктов.
Мне нужно найти изображения продуктов по номеру продукта из файла products.csv.
Я написал простой bash-скрипт для их поиска:
#!/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
но это не совсем то, что мне нужно. В результатах я могу найти следующее:
-----------------------------------
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 <--
-----------------------------------
Правильный результат должен содержать только картинки с этим номером (14.444) без 14.1448, 14.1445, 14.1449, 14.1446
Какой регулярный exp мне использовать в find, чтобы получить ожидаемый результат? Или, может быть, есть другой способ решить эту проблему?
Ваши идеи и предложения высоко ценятся.
решение1
Должно подойти следующее регулярное выражение:
-regex ".*/$x[^0-9].*"
Он содержит число сразу после косой черты, за которым следует нечисло.