#!/bin/bash # Generate missing $1/share/mimelnk/*.desktop files based on # error messages from running "kbuildsycoca --global" # Updated 2009-04-14 to handle running under kde4 and # to handle not finding any undefined mimetypes set -u # Show usage of unset variables as an error, to help catch typos. #set -v -x # Turn on for debugging. GetUndefinedMimeTypes() { local -a GrepOutput # Declare array for storing output from grep command local GrepLine local -a WordsFromLine FileNameTemp=`mktemp "$0".XXXXXX` # create temp file to hold command output `$1/bin/kbuildsycoca --global > "$FileNameTemp" 2>&1` # FileNameTemp="/home/dave/.xsession-errors" IFS=$'\n' # Break the output from the next command into one array variable per line GrepOutput=( $( grep mimetype $FileNameTemp | awk '{print $7 }'|sort -u ) ) unset IFS # reset to default rm -f "$FileNameTemp" if (( ${#GrepOutput[@]} == 0 )) ; then echo "No undefined mimetypes found" return # no undefined mimetypes found fi for GrepLine in "${GrepOutput[@]}"; do IFS=$'\t \';' # Break the output from the next command by tab, space, single quote and semi-colon WordsFromLine=(`echo "$GrepLine" | cut -f 1-10 `) MimeType="${WordsFromLine[1]}" IFS=$'\/' WordsFromLine=(`echo "$MimeType" | cut -f 1-10 `) unset IFS if (( ${#WordsFromLine[@]} > 1 )) ; then directoryname="$1/share/mimelnk/${WordsFromLine[0]}/" directoryname2="/usr/share/mimelnk/${WordsFromLine[0]}/" filename="${WordsFromLine[1]}.desktop" else directoryname="$1/share/mimelnk/" directoryname2="/usr/share/mimelnk/" filename="${WordsFromLine[0]}.desktop" fi if [ ! -d "$directoryname" ] ; then echo "Creating directoryname=$directoryname" mkdir -p "$directoryname" fi if [ ! -d "$directoryname2" ] ; then echo "Creating directoryname=$directoryname2" mkdir -p "$directoryname2" fi if [ ! -s "$directoryname$filename" ] ; then echo "Creating filename=$filename in $directoryname" echo "[Desktop Entry]" > "$directoryname$filename" echo "Encoding=UTF-8" >> "$directoryname$filename" echo "Type=MimeType" >> "$directoryname$filename" echo "MimeType=$MimeType" >> "$directoryname$filename" else echo " Warning MimeType $MimeType is undefined, yet $directoryname$filename already exists." fi if [ ! -s "$directoryname2$filename" ] ; then echo "Creating filename=$filename in $directoryname2" echo "[Desktop Entry]" > "$directoryname2$filename" echo "Encoding=UTF-8" >> "$directoryname2$filename" echo "Type=MimeType" >> "$directoryname2$filename" echo "MimeType=$MimeType" >> "$directoryname2$filename" else echo " Warning MimeType $MimeType is undefined, yet $directoryname2$filename already exists." fi done } _uid=$(id --user) if [ $_uid -ne 0 ] ; then echo " " echo "You need to be root to run $0" exit 1 fi if [ -x "/opt/kde3/bin/kbuildsycoca" ] ; then Prefix="/opt/kde3" else Prefix="/usr" fi GetUndefinedMimeTypes "$Prefix" exit