답변:
나는 bash를 좋은 방법으로 사용하려는 사람들을 위해이 답변을 생각해 냈습니다. 질문에 대한 대답은의 파일 목록과 관련이 /usr/share/applications
있지만 문제는 ls
명령을 구문 분석해서는 안된다는 것입니다 . 과거에는 같은 실수를 저질렀지만, 가장 좋은 방법은 for
루프를 사용하여 파일을 반복하는 것입니다. 소중한 키보드에서 더 많은 키를 사용해야하는 경우에도 마찬가지입니다.
for app in /usr/share/applications/*.desktop; do echo "${app:24:-8}"; done
나는 또한 이전 명령 문자열 조작 작업 에서 사용했습니다 : app
첫 24 문자 에서 /usr/share/applications/
마지막 8 문자는 제거했습니다 .desktop
.
최신 정보:
대시로 표시되는 응용 프로그램을 찾을 수있는 또 다른 곳은 ~/.local/share/applications/*.desktop
입니다. 따라서 다음 명령도 실행해야합니다.
for app in ~/.local/share/applications/*.desktop; do echo "${app:37:-8}"; done
이전 두 명령을 통합하려면 다음을 사용하십시오.
for app in /usr/share/applications/*.desktop ~/.local/share/applications/*.desktop; do app="${app##/*/}"; echo "${app::-8}"; done
설치된 모든 응용 프로그램 목록을 이름으로 얻으려면 가장 쉬운 방법은 다음과 같습니다.
sudo apt-get install aptitude
aptitude -F' * %p -> %d ' --no-gui --disable-columns search '?and(~i,!?section(libs), !?section(kernel), !?section(devel))'
다음과 같이 개발 패키지가 아닌 커널이 아닌 라이브러리가 아닌 설치된 모든 패키지의 멋진 목록을 얻을 수 있습니다.
* zip -> Archiver for .zip files
* zlib1g -> compression library - runtime
* zlib1g-dev -> compression library - development
* zsh -> shell with lots of features
* zsh-common -> architecture independent files for Zsh
.desktop
파일에 표시되지 않는 비 GUI 응용 프로그램도 나열하기 때문에 더 완벽 합니다.
--no-gui
됩니다. 답은 제거 된 상태 에서도 완료 됩니다.
--no-gui
부분 을 다시 가져 와서 생각했던 부분이없는 것 같습니다.
설치된 모든 응용 프로그램을 보려면 아래 명령을 실행하십시오.
ls /usr/share/applications | awk -F '.desktop' ' { print $1}' -
설치된 모든 응용 프로그램의 목록을 얻으려면 아래 명령을 실행하십시오.
ls /usr/share/applications | awk -F '.desktop' ' { print $1}' - > ~/Desktop/applications.txt
위의 명령 출력을 디렉토리 applications.txt
내의 파일에 저장합니다 ~/Desktop
.
또한 터미널에서 아래 명령을 실행하여 설치된 응용 프로그램을 나열하십시오.
find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort
텍스트 파일로 목록을 가져 오려면 아래 명령을 실행하십시오.
find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort > ~/Desktop/applications.txt
설치된 모든 응용 프로그램의 데스크탑 항목은 /usr/share/applications
디렉토리 에 저장 되며 파일 이름은 형식으로 되어 있습니다. 파일 이름에서 부품 을 application-name.desktop
제거하면 .desktop
설치된 응용 프로그램의 전체 목록이 표시됩니다.
최신 정보:
@Radu가 제안했듯이~/.local/share/applications
디렉토리 내에 추가로 설치된 응용 프로그램의 데스크탑 항목을 찾을 수도 있습니다 .
find /usr/share/applications ~/.local/share/applications -maxdepth 1 -type f -exec basename {} .desktop \;
ls
표현 목적과 위와 같은 중요하지 않은 작업을 위해 구문 분석 을 계속 하고이 제한 사항을 명심하려고 노력할 것이라고 생각합니다.
Super+를 눌렀을 때 표시되는 응용 프로그램 목록이 필요한 경우을 A사용할 수 있습니다 ls /usr/share/applications
. 당신이해야 할 유일한 일은 .desktop
매우 간단한 작업 인 엔딩을 대체 하는 것입니다. 나는 그것을한다 sed
:
ls /usr/share/applications | sed s/.desktop// - > installed-apps.txt
그러나 텍스트 편집기를 사용하여 목록을받은 후에 할 수 있습니다.
/usr/share/application/*.desktop
파일에는 특수 문자가 포함되어 있지 않으므로 ls
특히이 경우 구문 분석 이 허용됩니다.
bad name.desktop
예를 들어 파일을 만든 경우 어떻게해야 합니까? ls
여기서 위험을 감수 할 이유가 없습니다 .
게시 된 대부분의 답변에 .desktop 바로 가기의 파일 이름 추출이 포함 된 이유를 잘 모르겠습니다. .desktop 바로 가기 파일 이름은 Name
바로 가기 파일 내부의 필드입니다. Dash에 표시된 설치된 응용 프로그램 이름 목록을 작성하려면 아래의 해당 필드를 "grep"하십시오.[Desktop Entry]
bash가있는 기초 코드
#!/bin/bash
for file in /usr/share/applications/*.desktop;
do
while IFS== read -r key val
do
if [[ -z $key ]]; then
continue
else
if [[ $key =~ ^\[Desktop\ Entry ]]; then
interesting_field=1
elif [[ $key =~ ^\[ ]]; then
interesting_field=0
fi
fi
[[ $interesting_field -eq 1 ]] && [[ $key == "Name" ]] && echo $val
done < $file
done
그러나 이것은 대시에 표시되지 않는 단축키를 고려하지 않습니다. .desktop 사양을 더 잘 이해하는 사람은이 코드를 더 확장하여 그러한 지름길을 배제 할 수 있습니다.
편집 : 파이썬으로 다른 시도
#!/usr/bin/python
from os import listdir
from os.path import isfile, join
import ConfigParser
SHORTCUTDIR = "/usr/share/applications/"
shortcuts = [ file for file in listdir(SHORTCUTDIR) if isfile(join(SHORTCUTDIR, file)) and file.endswith(".desktop") ]
dash_shortcuts = []
for f in shortcuts:
c = ConfigParser.SafeConfigParser()
c.read(SHORTCUTDIR + f)
try:
if c.getboolean('Desktop Entry', 'NoDisplay') is True:
continue
except ConfigParser.NoOptionError:
pass
try:
if "unity" in c.get('Desktop Entry', 'NotShowIn').lower():
continue
except ConfigParser.NoOptionError:
pass
try:
if "unity" not in c.get('Desktop Entry', 'OnlyShowIn').lower():
continue
except ConfigParser.NoOptionError:
pass
dash_shortcuts += [ c.get("Desktop Entry", "Name") ]
for s in sorted(dash_shortcuts, key=str.lower):
print s
Name
파싱하는 .desktop에 두 개 이상의 항목 이 있으면 코드가 폭발하고 소음 이 발생합니다. 또한 관심있는 모든 라인이 고정 라인 번호에 있다고 가정해서는 안됩니다.
질문자는 설치된 모든 "앱"의 이름을 나열하려고합니다.
.desktop 파일이있는 앱 관련 :
/usr/share/applications
~/.local/share/applications
Name=
해당 .desktop 파일 의 줄에서 파생 됩니다. 한 예로 "캐릭터 맵"이 있습니다.Exec=
입니다. "캐릭터 맵"의 경우는 gucharmap
입니다.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
.desktop 파일이없는 앱 관련 :
"앱"을 정의하는 방법에 따라 일부 파일에는 .desktop 파일이 없습니다.
conky
, poppler-utils
, qpdf
, xdotool
및 wmctrl
고려 "응용 프로그램"? 이들을 이름으로 식별하고 나열하는 방법은 무엇입니까 (설치 한 것으로 가정)?awk
, find
, grep
, ls
그리고 sed
좀 더 이름을 지정합니다? 앱입니까, 그렇지 않습니까?경우 어떤 명령이있는 응용 프로그램으로, 다음의 생각 목록에 리눅스 명령을 사용할 수있는 모든 명령과 별칭 과 이 답변이 그들을 식별하는 데 도움이됩니다.
zsh
,zsh-common
다른 사람!