ฉันรู้ว่าฉันสามารถกดSuper+ Aเพื่อดูแอปที่ติดตั้งทั้งหมดใน Ubuntu แต่ฉันต้องการคำสั่งเพื่อแสดงชื่อของพวกเขา คำสั่ง
dpkg --get-selections | awk '{print $1}'
ยังไม่ใช่ตัวเลือกเนื่องจากจะแสดงแพ็คเกจที่ติดตั้งทั้งหมดและมีไดรเวอร์เคอร์เนลและไลบรารี
ฉันรู้ว่าฉันสามารถกดSuper+ Aเพื่อดูแอปที่ติดตั้งทั้งหมดใน Ubuntu แต่ฉันต้องการคำสั่งเพื่อแสดงชื่อของพวกเขา คำสั่ง
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
มันเสร็จสมบูรณ์มากขึ้นเนื่องจากยังแสดงรายการแอปพลิเคชันที่ไม่ใช่ GUI ซึ่งจะไม่ปรากฏใน.desktop
ไฟล์
--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
ที่นี่
ไม่แน่ใจว่าทำไมคำตอบที่โพสต์ส่วนใหญ่เกี่ยวข้องกับการแยกชื่อไฟล์ของทางลัดเดสก์ท็อป ชื่อไฟล์ทางลัด. เดสก์ท็อปของคุณสามารถเป็นอะไรก็ได้ แต่สิ่งที่สำคัญคือName
ฟิลด์ในไฟล์ทางลัด หากคุณต้องการสร้างรายการชื่อแอปพลิเคชันที่ติดตั้งซึ่งแสดงใน Dash เพียงแค่ "grep" ฟิลด์นั้นภายใต้[Desktop Entry]
รหัส Rudimental พร้อมทุบตี
#!/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 คนที่เข้าใจดียิ่งขึ้นเกี่ยวกับข้อมูลจำเพาะ. เดสก์ท็อปอาจต้องการขยายโค้ดนี้เพิ่มเติมเพื่อยกเว้นทางลัดประเภทนั้น
แก้ไข: พยายามอีกครั้งด้วย 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 ที่เกี่ยวข้อง ตัวอย่างหนึ่งคือ "ผังแสดงชุดอักขระ"Exec=
นั้น ในกรณีของ "Character Map" 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
และอื่น ๆ !