Obtendo lista de aplicativos instalados (NÃO pacotes)

5

Como posso obter uma lista de aplicativos instalados (com base em arquivos em / usr / share / applications /) sem gravar o analisador próprio? Preciso apenas do nome do aplicativo, caminho para o ícone do aplicativo e caminho para iniciar o aplicativo.

Estou usando o C ++ com bibliotecas do Qt. Claro, você pode me escrever um comando shell ou algo parecido com isso.

    
por Ivan Akulov 15.06.2012 / 16:19

1 resposta

3

Aqui está você. O resultado do comando a seguir é uma lista de valores separados por vírgulas. Primeira coluna: caminho para a entrada .desktop, segunda coluna: caminho para o ícone, terceira coluna: o executável.

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

Explicação: find prepara uma lista de arquivos que terminam com .desktop e são encontrados em / usr / share / applications ou em um subdiretório, e chama ( -exec ... {} \; ) um perlinereliner para analisar as informações.

O Perl é iniciado com a opção -n , que cria um loop implícito em iteração sobre cada linha do arquivo fornecido, e uma opção -e que especifica para executar o argumento fornecido.

O programa perl contém os blocos BEGIN e END a serem executados antes e depois de cada arquivo .desktop ser analisado (o perliner onlininer é chamado separadamente a cada vez que cada arquivo que find localizou). O bloco BEGIN registra o nome do arquivo (que é fornecido como o primeiro argumento para o oneliner, o {} pragma de find ) e os blocos END resumem as informações de maneira separada por vírgulas.

    
por January 18.09.2012 / 09:42

Tags