一連のファイルをIDに基づいて別のフォルダに移動したいのですが、ファイルを移動したいフォルダが存在し、一意であることを確認したいと思います。
これらのフォルダには名前の最初の部分に一致するIDがありますが、名前(ID)にも説明があります。しなければならないユニークですが、この例外を避けたい):
0123-app1
4567-app2
2020-app3
0123-shouldntbehere
4567
IDのあるファイルをディレクトリに移動したいです4567-app2
。
名前に説明があるので、正しいフォルダを見つけるにはワイルドカードを使用する必要があります。これで、変数に名前を表示しようとしましたが、その名前が一意であるか存在するかを確認するのに役立ちません。
APP_PATH=`echo $APP_ID*`
正しいフォルダを見つけて一意であることを確認するには、何を使用することをお勧めしますか?
ありがとう
答え1
私が実装した方法は、if
エラーコードチェックを含むステートメントを使用することでした。[ -d ...]
ワイルドカード分解時に複数のパラメータ(フォルダ名)が渡されるとエラーが発生します。またはファイルが存在しない場合。ls
inを使用すると、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