Thanks for the work you did on this - I needed it to clean out some messy
entries in Gnome after moving a $HOME structure to a newer Ubuntu release - the
original menu's had their titles messed up in ~/.local/share/applications/
I rewrote your script to use shell constructs instead of 'find'.
I've copied it here for others to play with.
Code:
#!/bin/sh
wine="wine"
rm="/bin/rm"
iterate_start_menu ()
{
 local menu_dir
 local oldIFS
 menu_dir=$1
 # don't use space as field-separator otherwise "paths with
spaces" will fail to parse correctly
 oldIFS=$IFS
 IFS=?
 echo "menu_dir=${menu_dir}"
 # add a trailing slash to the directory name, then the glob wildcard
 for entry in ${menu_dir}/*; do
  if [ -f "$entry" ]; then
	echo "Link: $entry";
    "$wine" winemenubuilder "$entry"
  elif [ -d "$entry" ]; then
	echo "Directory: $entry";
	iterate_start_menu "$entry"
  else
	echo "is unknown";
  fi
 done
 IFS=$oldIFS
}
# Delete current user-defined wine menus
"$rm" -f $HOME/.config/menus/applications-merged/wine*
"$rm" -rf $HOME/.local/share/applications/wine
# Rebuild Start Menu for all prefixes starting with ".wine-"
for prefix in "$HOME/".wine-*; do
 WINEPREFIX="$prefix"
 export WINEPREFIX
 # do not use a trailing / at the end of the directory name
 iterate_start_menu "${WINEPREFIX}/drive_c/windows/profiles/*/Start
Menu"
done