如何在不编写自己的解析器的情况下获取已安装应用程序的列表(基于 /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 块以逗号分隔的方式汇总信息。