find 中的正则表达式仅定位

find 中的正则表达式仅定位

我有包含产品编号的 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

我应该在 find 中使用什么常规指数来获得预期结果?或者也许还有其他方法可以解决它?

非常感谢您的想法或建议

答案1

以下正则表达式应该有效:

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

它包含斜杠后面的数字,后跟一个非数字。

相关内容