web-dev-qa-db-ja.com

タイプ別にグループ化されたインストール済みアプリケーションのリスト

システムにインストールされているアプリケーションのリストが必要ですが、スタートメニューに従ってリストされているものだけが必要です。

パッケージ/依存関係などのリストに興味がないので、以下はあまり役に立ちません:

 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が表示するものをテキストファイルに保存する方法です。

3
opticyclic

以下のpythonスクリプト)は、/usr/share/applicationsのすべてのデスクトップファイルと(Categories -section)セクションから(英語または国際*)インターフェイス名を読み取ります。多くのアプリケーションには複数のカテゴリがあるため、アプリケーションは複数のカテゴリに表示される可能性があります。

アプリケーションに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
Jacob Vlijm

次のスクリプトは、必要な出力に非常に類似した出力を提供します。

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)ではなく本名(GIMP Image Editor)を出力する別のスクリプトを試しましたが、一部のデスクトップファイルに改行が含まれていないため、奇妙な結果が得られます

3
Registered User

これを実行する場合:

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
oldfred