With GNU find:
find . -regextype posix-extended ! -regex '.{253,}' ! -type d
(that prints a ./ prefix which is not included in the 250 count).
With zsh:
setopt extendedglob # if not already in your ~/.zshrc
printf '%s\n' **/*~?(#c251,)(D^/)
That's all paths recursively (**/*) including hidden ones ((D)), but not (^) those of type directory (/), except (~) those that match ?(#c251,), that is that contain 251 characters or more.
POSIXly:
find . ! -path "$(printf %253s | tr ' ' '?')*" ! -type d
(note that there's nothing on Unix that guarantees that file names are made of valid characters. Except for the zsh one, those solutions may also report files whose path contain sequences of bytes that don't form valid characters (adding -path '*' may help excluding those). If you want to match on the number of bytes as opposed to number of characters in your locale, you can fix the locale to C with export LC_ALL=C).