По какой-то причине у меня есть куча оставшихся пунктов меню «Пуск» из приложений (например, Gnome Do, Synapse, Leafpad.), И мне было интересно, есть ли способ удалить все потерянные записи для приложений, которые больше не установлены?
Можно использовать следующую команду для списка значков приложения, которые связываются с несуществующими программами:
for i in {/usr,~/.local}/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || echo $i; done
Я подозреваю, что Вы найдете, что самый ваш настроенные значки в Вашей домашней папке, так как они автоматически не очищены диспетчером пакетов. Если это верно, и Вы хотели бы к мусор их внезапно, можно использовать модификацию предыдущей команды:
for i in ~/.local/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || trash $i; done
Или, конечно, обзор к ~/.local/share/applications/
в Наутилусе и мусоре их через графический интерфейс.
Когда приложение удалено, оно должно удалить пункты меню, которые оно установило. И так работает на моей машине.
Если это работает по-другому, это ошибка определенного пакета или проблема в вашей системе. Я не могу поверить, что у вас есть более 40 записей сиротами. Это было бы симптомом проблемы.
Ну, это сложно, но я хочу, по крайней мере, сказать вам, в чем проблема.
Gnome хранит установленные приложения в / usr / share / apps с файлами, оканчивающимися на .desktop (так что программа vlc запускается vlc.desktop)
Внутри каждого есть раздел «Категория», в котором Вы можете указать, в какой части меню «Приложения» эта программа должна быть. Дело в том, что единственный способ, которым я думаю, что это может быть сделано, - это использовать bash-скрипт, который спрашивает, установлен ли пакет, связанный с этим .desktop, или нет. если это не так, удалите этот файл .desktop. Когда вы удаляете файл, он выходит из меню, а когда ваше приложение находится в категории, это не отображается.
Это немного выходит за рамки моей компетенции, потому что каждая команда (dpkg, apt-get и т. Д.) Всегда возвращает хороший выход, когда они говорят, что пакет не установлен, поэтому мы должны прочитать выход из этого приложение ищет строку (например, «не установлена»), проверяет ее, и если строка существует, это означает, что приложение не установлено и файл .desktop можно удалить.
Итак, если вы хотите, вы можете просто войти в папку (/ usr / share / apps) и щелкнуть по файлам, которые соответствуют программам. Они исчезнут из меню приложений. Чтобы сделать это автоматически, я думаю, нам нужен хороший скрипт bash на треке, который я сказал.
Надеюсь, это поможет.
Если под меню «Пуск» имеется в виду меню «Приложения», вы можете отредактировать его, выбрав: Система -> Настройки -> Главное меню.
Вы можете добавлять, переставлять, редактировать и удалять записи по желанию.
Альтернатива:
После ответа @ændrük вот аналогичное решение, которые поддерживают пробелы в пути и подпапках, это может использоваться на определенной папке или весь диск для поиска поврежденный .desktop
файлы (ярлык)
find {/usr,~/.local,/usr/local,}/share/applications/ -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line; done
Для всего диска
find / -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line; done
Примечание: то, что любой метод может показать ложной положительной проверке дважды найденные файлы прежде, чем удалить их
Я нашел в Интернете очень умного человека, который знал о программе под названием Alacarte (простое редактирование меню GNOME). Устанавливается с помощью диспетчера программ. Это так просто в использовании. Просто нажмите, чтобы выделить запись об удаленной программе, от которой вы хотите избавиться, и нажмите «Удалить» справа, и готово.