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 中使用什麼常規 exp 才能獲得預期結果?或者也許,還有另一種方法可以解決它?

非常感謝您的想法或建議

答案1

以下正規表示式應該有效:

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

它包含斜槓後面的數字,後面跟著一個非數字。

相關內容