回答:
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
前の2つのコマンドを統合するには、次を使用できます。
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
.Removing .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
ただし、Dashに表示されないように隠されているショートカットは考慮されません。.desktopの仕様をよく理解している人は、このコードをさらに拡張して、これらの種類のショートカットを除外したいかもしれません
編集:Pythonでの別の試み
#!/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ファイルの行から派生しています。1つの例は「文字マップ」です。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
いくつかのより多くの名前を付けるには?アプリですか、そうではありませんか?場合は何もコマンドを持っているアプリとして考えられている、その後、使用可能なすべてのコマンドとエイリアスリストするLinuxコマンドと、この答えがそこにそれらを識別するのに役立ちます。
zsh
、zsh-common
および他の場所はありません!