script retourne mes menus en console
Publié : 14 nov 2015, 19:24
Un petit script qui permet en console de retrouver les menus/commandes dans le dossier /usr/share/applications/
un seul paramètre :
motDeRecherche : retourne la liste des programmes correspondant au mot (dans notre locale)
par exemple :
un seul paramètre :
-c
: retourne la liste des catégories, oumotDeRecherche : retourne la liste des programmes correspondant au mot (dans notre locale)
par exemple :
./apps.sh fire
./apps.sh browser
./apps.sh navigateur
./apps.sh web
./apps.sh video
#!/usr/bin/env bash
# apps.sh
# rechercher une application dans les menus
CG='\033[0m\033[32m'
CE='\033[0m'
CB='\033[1m'
param="$1"
if [[ $param == "-c" ]];then
lists=''
for f in $(find /usr/share/applications/ -type f -name "*.desktop" -readable 2>/dev/null); do
lists="${lists}$(awk -F '=' '/^Categories/ { print $2}' ${f})"
done
lists=${lists//;/\\n}
echo -e "${lists,,}" | sort | uniq -u
exit 0
fi
lg=$(locale 2>/dev/null | awk -F'=' '/^LANG/ {print $2}')
lg=${lg:0:2}
userdir="$HOME/.local/share/applications/"
[ -d "${userdir}" ] || userdir=''
files=$(find "/usr/share/applications/" "${userdir}" -type f -name "*.desktop" -readable 2>/dev/null| xargs grep -Eisl "^Name(.*)${param}|${lg}(.*)${param}|^Categories(.*)${param}")
doubles='' # avec $HOME
for f in ${files[@]}; do
basename=$(basename ${f})
if [[ ! "$doubles" =~ ";${basename}" ]]; then
echo ""
awk -F '=' '/^Name=/ { printf "○'$CB' %s '$CE'",$2 }' "$f"
awk -F '=' '/^Comment\['${lg}'\]/ { printf " %s",$2 }' "$f"
awk -F '=' '/^Exec/ { printf "\n\t'$CG'%s'$CE'\n",$2 }' "$f"
# echo -e "\t${basename}"
doubles="${doubles};${basename}"
fi
done
# pas le bon ordre :(
# for f in ${files[@]}; do
# awk ' BEGIN{printf "\n○ ";FS="="}
# {
# if ($1=="Name") { printf "'$CB' %s '$CE'",$2 }
# if ($1=="Exec") { printf "\n\t'$CG'%s'$CE'",$2 }
# }' "$f"
# done