文字列がイメージであるかどうかを確認する方法

文字列がイメージであるかどうかを確認する方法

.desktopファイルからアイコンパスを抽出しています。

時には、ファイルにファイルの絶対パスが含まれていることがあります。

Icon=/snap/spotify/41/usr/share/spotify/icons/spotify-linux-128.png

それ以外の場合はファイル名のみがあり、拡張子はありません。

Icon=spotify-linux-128

私は現在/usr/share/icons/hicolorフォルダからアイコン名を検索しています。しかし、アイコンパスが絶対パスでファイルを指している場合、findが間違った場所を探しているため、結果は出ません。

私のbashスクリプトに文字列が画像であるかどうかを知る方法はありますか?

私は確認しようとしています:

file $iconpath 

しかし、パスが存在しない場合、明らかに何かが間違っているでしょう。

もっと良い方法がありますか?

あなたは何をしますか?

答え1

@muruが指摘したように。

これ確かに解決策は、文字列が/で始まることを確認することです。

つまり

if [[ $icon == /* ]] 
then
    echo "is a file path"
else
    echo "is not a file path"
fi

編集する:

ファイルが存在することを確認するためにこれを行うこともできます。

if [ -a $icon ];
then
    echo "File exists"
else
    echo "File does not exist"
fi

答え2

または、最後の要素(最後の要素を含む)の前のすべてのパス要素を切り取ります。/

Icon=spotify-linux-128
echo ${Icon##*/}
spotify-linux-128

Icon=/snap/spotify/41/usr/share/spotify/icons/spotify-linux-128.png
echo ${Icon##*/}
spotify-linux-128.png

次に、*最後にaを追加し、find指定された検索ルートに出力を提供します。

ls -1 sp*
spotify-linux-128
spotify-linux-128.png
spotify-linux-128.png.banana
spotify-linux-128.png.png

Icon=/snap/spotify/41/usr/share/spotify/icons/spotify-linux-128.png
fname=${Icon##*/}
find . -maxdepth 1 -iname "$fname*" 

./spotify-linux-128.png.banana
./spotify-linux-128.png
./spotify-linux-128.png.png

関連情報