Cette formule de recherche devrait fonctionner pour vous :
find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y="$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x")" && mv "$x" "$y" ' \;
Aucune des réponses ci-dessus ne trouve les fichiers ou répertoires qui se terminent par un espace (' ') ou un point/point ('.') qui ne sont pas non plus visibles avec l'API Win32.
En ajoutant à .e.g la réponse de @falsetru, on pourrait faire
find . -name '*[<>:/\\|?*]*' -o -name '*[ \.]'
le modèle fnmatch vous permet de spécifier que les caractères dans []
comme suit :
find . -name '*[<>:/\\|?*]*'