この検索ワンライナーはあなたのために働くはずです:
find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y="$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x")" && mv "$x" "$y" ' \;
上記の回答のいずれも、Win32 API では表示されないスペース (' ') またはピリオド/ドット ('.') で終わるファイルまたはディレクトリを検出しません。
.e.g @falsetru の回答に追加して、できること
find . -name '*[<>:/\\|?*]*' -o -name '*[ \.]'
fnmatch パターンを使用すると、[]
でその文字を指定できます 次のように:
find . -name '*[<>:/\\|?*]*'