获取已安装应用程序列表(非软件包)

获取已安装应用程序列表(非软件包)

如何在不编写自己的解析器的情况下获取已安装应用程序的列表(基于 /usr/share/applications/ 中的文件)?我只需要应用程序名称、应用程序图标的路径和启动应用程序的路径。

我使用的是 C++ 和 Qt 库。当然,你可以为我编写 shell 命令或其他类似的东西。

答案1

给你。以下命令的结果是逗号分隔的值列表。第一列:.desktop 条目的路径,第二列:图标的路径,第三列:可执行文件。

find /usr/share/applications/ -name '*.desktop' -exec perl -ne 'BEGIN { $pname = $ARGV[0] ; } ; /(Icon|Exec)=(.*)/ and $ret{$1} = $2 ; END { printf "%s,%s,%s\n", $pname, $ret{Icon}, $ret{Exec} ; }' {} \;

解释:find准备一个以 .desktop 结尾且位于 /usr/share/applications 或其子目录中的文件列表,然后调用 ( -exec ... {} \;) perl 单行程序来解析信息。

Perl 启动时-n会创建一个隐式循环,对给定文件的每一行进行迭代,还有一个-e选项指定运行所提供的参数。

perl 程序包含 BEGIN 和 END 块,它们在解析每个 .desktop 文件之前和之后运行(每次针对每个已find定位的文件分别调用 perl 单行程序)。BEGIN 块记录文件名(作为单行程序的第一个参数,即{}的指令find),END 块以逗号分隔的方式汇总信息。

相关内容