Tato jednolinka by vám měla fungovat:
find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y="$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x")" && mv "$x" "$y" ' \;
Žádná z výše uvedených odpovědí nenajde soubory nebo adresáře, které končí buď mezerou (' ') nebo tečkou/tečkou ('.'), které také nejsou viditelné pomocí Win32 API.
Přidání odpovědi např. @falsetru by bylo možné
find . -name '*[<>:/\\|?*]*' -o -name '*[ \.]'
fnmatch pattern vám umožní specifikovat znaky v []
následovně:
find . -name '*[<>:/\\|?*]*'