Find files with illegal windows characters in the name on Linux
This find one-liner should work for you:
find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y="$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x")" && mv "$x" "$y" ' \;
Neither of the answers above finds files or directories that ended in either space (' ') or period/dot ('.') which are also not visible with Win32 API.
Adding to .e.g @falsetru's answer, one could do
find . -name '*[<>:/\\|?*]*' -o -name '*[ \.]'
fnmatch pattern allow you to specify that characters in []
as follow:
find . -name '*[<>:/\\|?*]*'