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.)