
製品番号が記載された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.1448、14.1445、14.1449、14.1446 を除く、その番号 (14.444) の画像のみが含まれる必要があります。
期待される結果を得るために、find でどのような正規表現を使用すればよいでしょうか? あるいは、別の解決方法があるのでしょうか?
あなたのアイデアや提案を歓迎します
答え1
次の正規表現が機能するはずです:
-regex ".*/$x[^0-9].*"
スラッシュの直後に数字が含まれ、その後に数字以外の文字が続きます。