如何判断字符串是否是图像

如何判断字符串是否是图像

我正在从 .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 指出的。

明显的解决方案是检查字符串是否以 / 开头

IE

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

然后只需*在末尾添加一个并将输出提供给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

相关内容