Answers:
您可以使用以下命令列出链接到不存在的程序的应用程序图标:
for i in {/usr,~/.local}/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || echo $i; done
我怀疑您会发现您的大多数图标都位于主文件夹中,因为软件包管理器不会自动清除这些图标。如果是这种情况,并且您想一次将其全部废弃 ,则可以使用前面命令的修改:
for i in ~/.local/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || trash $i; done
或者,当然,也可以~/.local/share/applications/
在Nautilus中浏览并通过图形界面将其丢弃。
好吧,这很难,但是我至少要告诉你是什么问题。
Gnome将已安装的应用程序存储在/ usr / share / applications中,文件以.desktop结尾(因此vlc程序由vlc.desktop启动)
在每个程序的内部,都有一个“类别”部分,您可以在其中将想要的程序设置在“应用程序”菜单的哪个部分。问题是:我认为可以完成您所要求的唯一方法是使用bash脚本,该脚本询问是否安装了与该.desktop相关的软件包。如果不是,请删除该.desktop文件。删除文件后,该文件将不在菜单中,并且当您的应用属于某个类别时,该文件将不会显示。
那有点超出我的范围,因为每个命令(dpkg,apt-get等)在未安装软件包时总是返回一个好的出口,因此我们必须阅读该应用的出口以进行搜索一个字符串(例如“未安装”),进行检查,如果该字符串存在,则表示未安装该应用程序,可以删除.desktop。
因此,如果需要,您可以只输入文件夹(/ usr / share / applications)并单击与程序相对应的文件。它们将从“应用程序”菜单中消失。要自动执行此操作,我想我们在我说的赛道上需要一个不错的bash脚本。
我希望这会有所帮助。
选择:
在@ændrük回答之后,这是一个类似的解决方案,它支持path和子文件夹中的空格,可以在特定的文件夹或整个磁盘上使用它来查找损坏的.desktop
文件(快捷方式)
find {/usr,~/.local,/usr/local,}/share/applications/ -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line; done
对于整个磁盘
find / -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line; done
注意:任何方法都可以对两次找到的文件进行误报检查,然后再删除它们