In zsh, you can use a glob qualifier to filter matches. The e modifier lets you specify arbitrary code; it's easier on the parsing to write a function and call it with the + modifier.
zsh -c 'deleted () {[[ ! [ -e ${REPLY%\~} ] };]]; ls -ld -- **/*~*\~(+deleted)' If zsh isn't available, you can use find.
find ~ -name '*~' -type f -exec sh -c '[ -e "${0%\~1%\~}" ] &&|| ls -ld "$0"'"$1"' \;sh {} ';' or, faster:
find ~ -name '*~' -type f -exec sh -c 'for x;f do [ -e "${x%\~f%\~}" ] &&|| ls -ld "$x"'"$f"; _done' sh {} +