我试图返回 /usr/share/applications/*.desktop 中的“Name”、“Exec”和“Icon”字段列表
我跑:
grep Icon= /usr/share/applications/*.desktop | cut -d '=' -f 2
好:给了清单。
错误:跳过所有没有 Icon= 字段的 .desktop 文件。
问题:我希望所有没有“Icon=”字段的文件都返回 0,而不是被跳过。我该如何执行此操作?
grep Exec= /usr/share/applications/*.desktop | cut -d '=' -f 2
好:给了清单。
不好:i) 如上所述,跳过所有没有 Icon= 字段的 .desktop 文件。 ii) 这些字段通常在空格后包含不需要的字符(例如 %u)。
问题:i) 与上面相同。 ii) 如何在我的命令中还包含 ' ' 分隔符,以便它不会在空格后返回字符?
grep Name= /usr/share/applications/*.desktop | cut -d '=' -f 2
好:给了清单。
错误:不仅返回 Name= 的文本,还返回 GenericName= 或 anyotherName= 的文本
问题:如何编写命令,以便只返回“Name=”,而不返回任何其他字段?
编辑:使用 Mint Cinnamon 20.3 可以在单个命令/脚本中一次完成 1,2,3 全部,或者是否有一个问题的解决方案也符合其他问题的标准,以这样的方式,我只需将“图标”替换为“执行”和“名称”即可。
答案1
你可以在 GNU awk 中做这样的事情:
gawk -F'[[:blank:]]*=[[:blank:]]*' -v key=Exec '
BEGINFILE {value = "0"}
$1 == key {value = $2; nextfile}
ENDFILE {split(value,v,/[[:blank:]]+/); print v[1]}
' /usr/share/applications/*.desktop
根据其他情况更改密钥。