我知道,我只需要按下Super+A就可以看到在Ubuntu中安装的所有应用程序,但是我需要一个命令来列出它们的名称。这个命令是:
dpkg --get-selections | awk '{print $1}'
也不是一个选择,因为它显示了所有已安装的软件包,并且包含驱动程序、内核和库。
dpkg --get-selections | awk '{print $1}'
也不是一个选择,因为它显示了所有已安装的软件包,并且包含驱动程序、内核和库。
/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
。
更新:
在Dash显示的应用程序中,您还可以找到另一个位置:~/.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 应用程序。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
命令不应该被解析。 - Radu Rădeanuls
——出于表征目的和非关键任务的考虑,并试着记住这个限制。谢谢你的提醒! - Rolf#!/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
#!/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
条目,代码将会出错并抛出异常,而这种情况往往是存在的。另外,你也不能假设所有你感兴趣的行都会出现在固定的行号上。 - FlintName
选项可能在行号的范围之外,尤其是在 [Desktop\ Entry ]
下面有很多选项或者空行的情况。而且 .desktop
文件就是一个 ini 文件。 - Flintls /usr/share/applications
命令。你唯一需要做的是替换掉.desktop
后缀,这是一个非常简单的任务。我会使用sed
来完成它。ls /usr/share/applications | sed s/.desktop// - > installed-apps.txt
但是您可以在收到列表后使用文本编辑器进行操作。
ls
命令永远不应该被解析。 - Radu Rădeanu/usr/share/application/*.desktop
文件不包含任何特殊字符,所以在这种情况下允许解析ls
命令。 - Danatelabad name.desktop
的文件呢?这里没有必要冒险使用 ls
命令。 - terdon/usr/share/applications
中具有.desktop文件的应用程序。~/.local/share/applications
中找到。Name=
行派生而来。一个例子是“字符映射”。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
zsh
、zsh-common
和其他应用程序都不适合! - Radu Rădeanu--no-gui
即可。 - rusty