AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 490139
Accepted
opticyclic
opticyclic
Asked: 2014-07-01 13:45:44 +0800 CST2014-07-01 13:45:44 +0800 CST 2014-07-01 13:45:44 +0800 CST

列出按类型分组的已安装应用程序

  • 772

我想要一个安装在我系统中的应用程序列表,但是,我只想要按照开始菜单列出的应用程序。

我对包/依赖项列表等不感兴趣,因此以下内容没有太大帮助:

 dpkg --get-selections | grep -v deinstall

这有点近了。

for app in /usr/share/applications/*.desktop; do echo "${app:24:-8}"; done

但是,名称与菜单中的名称不完全匹配,也不符合我对它们进行分组的其他标准。

例如我想看

Graphics
     GIMP Image Editor

不是

gimp

所以总而言之,我正在寻找的是一种将 Alacarte 显示的内容保存到文本文件的方法。

command-line
  • 3 3 个回答
  • 881 Views

3 个回答

  • Voted
  1. Registered User
    2014-07-01T21:20:01+08:002014-07-01T21:20:01+08:00

    以下脚本将提供与您想要的非常相似的输出。

    var=$(echo $(for f in /usr/share/applications/*.desktop;do cat $f|grep -i categories|sed -e 's/Categories=//g;s/\;/\n/g';done|sort|uniq))
    for n in $var
    do
      echo $n
      for f in /usr/share/applications/*.desktop
      do
        echo -e -n "\t" $f|sed -e 's!/usr/share/applications/!!g;s/.desktop/::/g'
        echo $(cat $f |grep -i categories|sed -e 's/Categories=//g;s/\;/:/g')
      done |grep -i :$n: |sed s/'::.*'//
    done
    

    将输出为

    ...
    Development
         bluefish
         boa-constructor
         eclipse
         gambas3
         GNUSim8085
         python2.7
         python3.2
         qtcreator
         ubuntusdk
    DiscBurning
         brasero
         furiusisomount
    Documentation
         yelp
    ...
    

    解释

    • var:存储所有可能类别的列表。
    • 内部 for 循环查找包含外部 for 循环提供的类别的应用程序列表。内部 for 循环也输出所需的一切。

    我还尝试了另一个输出真实名称(GIMP Image Editor)而不是包名称(gimp)的脚本,但它给出了奇怪的结果,因为一些桌面文件不包含换行符

    • 3
  2. Best Answer
    Jacob Vlijm
    2014-07-02T06:25:57+08:002014-07-02T06:25:57+08:00

    /usr/share/applications下面的 python 脚本从 中的所有桌面文件及其- 部分读取(英语或国际*)接口名称Categories。它根据类别列出所有找到的应用程序。由于许多应用程序确实有多个类别,因此应用程序可以出现在多个类别中。

    如果应用程序没有Categories=提及,则会Uncategorized在列表下方的部分中提及。

    *注意 某些应用程序(如 Thunderbird)针对每种语言都有大量的接口名称列表。这个脚本照原样读取第一个接口名称,这是国际上使用的名称。可以更改脚本以读取特定语言的名称(如果存在),或自动读取系统的语言,但这需要更广泛的编码:)

    使用它:

    复制下面的脚本,将其粘贴到一个空文件中,另存为applist.py. 通过命令运行它(在终端窗口中):

    python3 /path/to/script/applist.py
    

    剧本:

    #!/usr/bin/env python3
    import os
    
    uncategorized = []
    categories = []
    data = []
    for item in os.listdir("/usr/share/applications"):
        if item.endswith(".desktop"):
            with open("/usr/share/applications/"+item) as data_source:
                lines = data_source.readlines()
            interface_name = [l.replace("\n", "").replace("Name=", "") \
                              for l in lines if l.startswith("Name=")][0]
            if len([l for l in lines if l.startswith("Categories")]) == 0:
                uncategorized.append(interface_name)
            else:
                subcats = [item for item in [l.replace("\n", "").replace(
                    "Categories=", "") for l in lines if l.startswith(
                        "Categories=")][0].split(";") if item != ""]
                data.append([interface_name, subcats])
                categories = categories + subcats
    categories = sorted([item for item in set(categories)])
    for item in categories:
        applications = [subdata[0] for subdata in data if item in subdata[1]]
        print(item)
        for app in applications:
            print("   "+app)
    print("Uncategorized")
    for item in uncategorized:
        print("    "+item)
    

    给出输出的印象:

    我输出的一小部分:

    Audio
       Audacity
       MuseScore
       PulseAudio Volume Control
       Rhythmbox
    AudioVideo
       Cheese
       VLC media player
       Audacity
       Rhythmbox
       MuseScore
       Videos
       OpenShot Video Editor
       Brasero
       PulseAudio Volume Control
       Rhythmbox
    AudioVideoEditing
       Audacity
       MuseScore
       OpenShot Video Editor
    BoardGame
       Mahjongg
    Calculator
       Calculator
    
    • 3
  3. oldfred
    2014-07-01T15:00:21+08:002014-07-01T15:00:21+08:00

    如果你运行这个:

    dpkg-query -W --showformat='${Package} ${Version} ${Section}\n' > filesystem.manifest
    

    然后 filesystem.manifest 看起来像这样:

    abiword-common 2.9.2+svn20120213-1 editors
    accountsservice 0.6.15-2ubuntu9.7 admin
    acl 2.2.51-5ubuntu1 utils
    acpi-support 0.140.1 admin
    acpid 1:2.0.10-1ubuntu3 admin
    activity-log-manager-common 0.9.4-0ubuntu3.2 utils
    activity-log-manager-control-center 0.9.4-0ubuntu3.2 utils
    adduser 3.113ubuntu2 admin
    adium-theme-ubuntu 0.3.2-0ubuntu1 gnome
    

    这显示了应用程序的所有详细信息。

    apt-cache show zim
    
    • 0

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve