J'ai trouvé une bash Une seule phrase qui recherche chaque fichier et dossier dont le nom contient des caractères non valides et renomme le fichier/dossier en remplaçant chaque caractère non valide par un tiret :
find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y=$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x") && mv -n "$x" "$y" ' \;
Il est possible qu'un fichier ait un nom illégal qui serait corrigé par le même nom légal qu'un autre fichier au nom illégal (exemple : deux fichiers nommés "fle"). La ligne unique ci-dessus ne changera pas le nom du deuxième (ou autre) fichier au nom illégal qui serait corrigé avec le même nom que le premier. Cela signifie que vous pouvez encore avoir des fichiers illégalement nommés après l'exécution du one-liner. Après avoir exécuté ce one-liner, exécutez
find . -name "*[<>:\\|?*]*"
pour identifier tous les fichiers illégalement nommés qui existent encore. Une façon de gérer cette situation est de remplacer le tiret dans la substitution sed par un autre caractère, par exemple un trait de soulignement, et de réexécuter la ligne unique.