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