Una soluzione un po 'pericolosa è questa, dalla riga di comando:
find . -type f ! -regex '.*/[ -.0-~]*' -exec rm {} +
Sostituisci il solitario . con il nome della directory superiore se non hai prima cambiato la directory pertinente. Per sicurezza, provate prima il comando più breve
find . -type f ! -regex '.*/[ -.0-~]*'
e assicurati che elenchi solo i file che desideri eliminare. L'espressione regolare (regexp o regex) qui corrisponde a qualsiasi percorso che termina in una barra seguita da qualsiasi combinazione di caratteri ASCII stampabili, ad eccezione di / , i caratteri dello spazio sono il primo e ~ l'ultimo, mentre . e 0 surround / nella sequenza ASCII.
Un avvertimento tra molti: non so con certezza se la tua corrente impostazione locale possa cambiare la sequenza di caratteri in ordine, e quindi forse cambiare il significato della regexp. Non penso che lo faccia, ma se lo fa, eseguendo i comandi come
LC_COLLATE=C find …
dovrebbe rimuovere il pericolo.
Ancora un altro avvertimento: assicurati di avere un backup prima di provare questo. Non prenderò la colpa per alcuna perdita di dati se ti sbagli. La linea di comando è un ottimo strumento per spararti ai piedi! A volte solo uno spazio fuori posto può significare disastri. (In questo caso, ad esempio, manca lo spazio singolo dopo che la parentesi sinistra è mortale.)