Ho trovato una bash one-liner che trova ogni file e cartella con caratteri non validi nel nome e rinomina il file / cartella, cambiando ogni carattere non valido in un trattino:
find . -name "*[<>:\|?*]*" -exec bash -c 'x="{}"; y=$(sed "s/[<>:\|?*]\+/-/g" <<< "$x") && mv -n "$x" "$y" ' \;
È possibile che un file abbia un nome non valido che verrebbe corretto con lo stesso nome legale di un altro file con nome illegale (Esempio: due file chiamati "fle"). Il one-liner di cui sopra non cambierà il nome del secondo (o ulteriore) file di nome illegale che verrebbe corretto con lo stesso nome del primo. Ciò significa che potresti ancora avere alcuni file di nome illegittimo dopo l'esecuzione del one-liner. Dopo aver eseguito questo one-liner, esegui
find . -name "*[<>:\|?*]*"
di nuovo per identificare eventuali file con nomi illegali che esistono ancora. Un modo per affrontare questa situazione è di cambiare il trattino nella sostituzione sed in un altro carattere, ad es. sottolineatura ed esegui di nuovo l'one-liner.