Page 1 sur 1

script retourne mes menus en console

Publié : 14 nov 2015, 19:24
par papajoke
Un petit script qui permet en console de retrouver les menus/commandes dans le dossier /usr/share/applications/

un seul paramètre :
-c : retourne la liste des catégories, ou
motDeRecherche : 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


Image

#!/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

Re: script retourne mes menus en console

Publié : 15 jan 2017, 07:36
par lemust83
:bjr:
J'avais mis ce script de côté, et du coup je l'ai zappé :rougir:
Très intéressant :bien
Par contre quand je fais ./apps.sh video , ça me retourne la totalité de ce qui est installé sans restreindre au mot clé "video" . Pas grave, mais il faut chercher...

Edit: Ça foire sur le portable :confus:

[steph@Dell ~]$ ./apps.sh
find: paramètre manquant pour « -name »
Utilisation : grep [OPTION]... MOTIF [FICHIER]...
Exécutez « grep --help » pour obtenir des renseignements complémentaires.
./apps.sh: ligne 30: ^Name(.*)|fr(.*)|^Categories(.*) : commande introuvable

[steph@Dell ~]$ ./apps.sh -c
find: paramètre manquant pour « -name »

[steph@Dell ~]$ ./apps.sh video
find: paramètre manquant pour « -name »
Utilisation : grep [OPTION]... MOTIF [FICHIER]...
Exécutez « grep --help » pour obtenir des renseignements complémentaires.
./apps.sh: ligne 30: ^Name(.*)video|fr(.*)video|^Categories(.*)video : commande introuvable
[steph@Dell ~]$


Le contenu est pourtant le même sur les deux PCs puisque copié ici . :?:

Re: script retourne mes menus en console

Publié : 15 jan 2017, 16:35
par lemust83
Trouvé!
Sur la Tour, j'ai copié le code à la souris alors qu'avec le Portable, j'ai utilisé la fonction <Tout sélectionner> de la balise code qui génère des blancs en tête de lignes ce qui pourrait contrarier ton code....
Je l'ai repris à la volée et ça beigne :bien