Wymyśliłem tę odpowiedź dla osób, które chcą dobrze wykorzystać bash. Oczywiste jest, że odpowiedź na pytanie dotyczy listy plików /usr/share/applications
, ale problem polega na tym, że ls
komendy nie należy nigdy analizować . W przeszłości popełniłem ten sam błąd, ale teraz dowiedziałem się, że najlepszym sposobem jest użycie for
pętli do iteracji plików, nawet jeśli muszę użyć więcej klawiszy z mojej cennej klawiatury:
for app in /usr/share/applications/*.desktop; do echo "${app:24:-8}"; done
Użyłem również w poprzednich operacjach ciągów poleceń : usunięto z app
pierwszych 24 znaków, które są, /usr/share/applications/
i ostatnich 8 znaków, które są .desktop
.
Aktualizacja:
Innym miejscem, w którym można znaleźć aplikacje pokazane przez Dash, jest ~/.local/share/applications/*.desktop
. Musisz więc również uruchomić następujące polecenie:
for app in ~/.local/share/applications/*.desktop; do echo "${app:37:-8}"; done
Aby ujednolicić poprzednie dwa polecenia, możesz użyć:
for app in /usr/share/applications/*.desktop ~/.local/share/applications/*.desktop; do app="${app##/*/}"; echo "${app::-8}"; done
zsh
,zsh-common
i inni!--no-gui
usunięciu.--no-gui
część, wygląda na to, że nie ma tego, co myślałem.Uruchom poniższe polecenie, aby zobaczyć wszystkie zainstalowane aplikacje,
Jeśli chcesz uzyskać listę wszystkich zainstalowanych aplikacji, uruchom poniższe polecenie,
Będzie przechowywać powyższe dane wyjściowe polecenia do
applications.txt
pliku w~/Desktop
katalogu.LUB
Uruchom także poniższe polecenie na terminalu, aby wyświetlić listę zainstalowanych aplikacji,
Aby uzyskać listę w pliku tekstowym, uruchom poniższe polecenie
Wpisy na pulpicie dla wszystkich zainstalowanych aplikacji są przechowywane w
/usr/share/applications
katalogu, w którym nazwy plików mają format.application-name.desktop
Usunięcie.desktop
części z nazw plików daje całkowitą listę zainstalowanych aplikacji.Aktualizacja:
Jak sugeruje @Radu , w
~/.local/share/applications
katalogu można również znaleźć wpisy pulpitu dla dodatkowych zainstalowanych aplikacji .źródło
ls
polecenie nie powinno być nigdy analizowane !ls
- do celów reprezentacyjnych i do niekrytycznych zadań, takich jak powyższe - i postaram się pamiętać o tym ograniczeniu, dziękuję za uwagi!Jeśli potrzebujesz listy aplikacji wyświetlanej po naciśnięciu Super+ A, możesz użyć
ls /usr/share/applications
. Jedyne, co powinieneś zrobić, to zastąpić.desktop
zakończenie, co jest dość prostym zadaniem. Robię to zsed
:Ale możesz to zrobić po otrzymaniu listy za pomocą edytora tekstu.
źródło
ls
polecenie nie powinno być nigdy analizowane !/usr/share/application/*.desktop
pliki nie zawierają żadnych znaków specjalnych, więc parsowanie,ls
szczególnie w tym przypadku, jest dozwolone.bad name.desktop
na przykład? Nie ma powodu, aby ryzykowaćls
tutaj.Nie jestem pewien, dlaczego większość opublikowanych odpowiedzi obejmuje wyodrębnienie nazwy pliku skrótów .desktop. Nazwa pliku skrótu .desktop może być dowolna, ale ważne jest
Name
pole wewnątrz pliku skrótu. Jeśli chcesz zbudować listę zainstalowanych aplikacji wyświetlanych w Dash, po prostu „grep” w tym polu[Desktop Entry]
Podstawowy kod, z bash
Ale to nie uwzględnia skrótów, które są ukryte przed wyświetleniem w Dash. Ktoś, kto lepiej rozumie specyfikację .desktop, może chcieć rozszerzyć ten kod, aby wykluczyć tego rodzaju skróty
Edycja: kolejna próba z Pythonem
źródło
Name
w analizatorze znajduje się więcej niż jeden wpis, co zawsze ma miejsce. Nie należy również zakładać, że wszystkie linie, którymi jesteś zainteresowany, będą na stałym numerze liniiName
opcja może znajdować się poza tym zakresem numeru linii, szczególnie przy wielu opcjach lub pustych liniach poniżej[Desktop\ Entry ]
. Plik .desktop to plik iniPytający chce wymienić nazwy wszystkich zainstalowanych „aplikacji”.
W przypadku aplikacji z plikami .desktop :
/usr/share/applications
~/.local/share/applications
Name=
wiersza w odpowiednim pliku .desktop. Jednym z przykładów jest „Mapa postaci”.Exec=
. W przypadku „mapy postaci” byłoby togucharmap
.sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop
Jeśli chodzi o aplikacje bez plików .desktop :
W zależności od tego, jak zdefiniowano „aplikację”, niektóre nie mają plików .desktop.
conky
,poppler-utils
,qpdf
,xdotool
iwmctrl
uznać za „aplikacje”? Jak można je zidentyfikować i wymienić według ich nazw (zakładając, że ktoś je zainstalował)?awk
,find
,grep
,ls
ised
aby wymienić kilka? Czy to aplikacje, czy nie?Jeśli cokolwiek , co ma polecenie, jest uważane za aplikację, to polecenie Linuksa wyświetla listę wszystkich dostępnych poleceń i aliasów, a ta odpowiedź tam pomoże je zidentyfikować.
źródło