Список установленных приложений, сгруппированных по типу
Мне нужен список приложений, установленных в моей системе, однако я хочу только те, которые перечислены в меню "Пуск".
Меня не интересует список пакетов / зависимостей и т. Д., Поэтому следующее не очень полезно:
dpkg --get-selections | grep -v deinstall
Это немного ближе.
for app in /usr/share/applications/*.desktop; do echo "${app:24:-8}"; done
Тем не менее, имена не совпадают точно с тем, что есть в меню, и это не соответствует моему другому критерию их группировки.
например, я хочу увидеть
Graphics
GIMP Image Editor
не
gimp
Подводя итог, я ищу способ сохранить текстовый файл, который отображает Алакарте.
3 ответа
Сценарий Python ниже читает имена интерфейсов (английский или международный *) из всех файлов рабочего стола в /usr/share/applications
а также их 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
Следующий скрипт даст вывод, очень похожий на то, что вы хотите.
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), но он дает странные результаты, потому что некоторые файлы рабочего стола не содержат перевода строки
Если вы запустите это:
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