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