ワイルドカードを使用してフォルダ名を取得し、一意性を確認する方法

ワイルドカードを使用してフォルダ名を取得し、一意性を確認する方法

一連のファイルをIDに基づいて別のフォルダに移動したいのですが、ファイルを移動したいフォルダが存在し、一意であることを確認したいと思います。

これらのフォルダには名前の最初の部分に一致するIDがありますが、名前(ID)にも説明があります。しなければならないユニークですが、この例外を避けたい):

0123-app1
4567-app2
2020-app3
0123-shouldntbehere

4567IDのあるファイルをディレクトリに移動したいです4567-app2

名前に説明があるので、正しいフォルダを見つけるにはワイルドカードを使用する必要があります。これで、変数に名前を表示しようとしましたが、その名前が一意であるか存在するかを確認するのに役立ちません。

APP_PATH=`echo $APP_ID*`

正しいフォルダを見つけて一意であることを確認するには、何を使用することをお勧めしますか?

ありがとう

答え1

私が実装した方法は、ifエラーコードチェックを含むステートメントを使用することでした。[ -d ...]ワイルドカード分解時に複数のパラメータ(フォルダ名)が渡されるとエラーが発生します。またはファイルが存在しない場合。lsinを使用すると、elseどのような状況が発生したかがわかります(複数のフォルダがある場合は戻りコードは0)。

if [ -d ${ID}* ] 2>/dev/null; then
    echo "Folder exists and is unique"
else
    ls ${ID}* >/dev/null 2>&1
    if [ $? -ne 0 ]; then
        echo "No folder exists starting with ${ID}"
    else
        echo "More than one folder starting with ${ID}"
    fi
fi

関連情報