Skipping binaries and hidden files were important for me:

This one worked well for me:

 find . -type f -not -path '*/\.*' -exec grep -Il '.' {} \; | xargs -L 1 dos2unix -k

Which translates to: find all non-hidden files recursively in the current directory, then using grep, list all non-binary (-I) non-empty files, then pipe it into xargs one file at a time to dos2unix and keep the original timestamp.

Hope that helps.