我正在从 .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