Una solución algo peligrosa es esta, desde la línea de comandos:
find . -type f ! -regex '.*/[ -.0-~]*' -exec rm {} +
Reemplace el solitario .
con el nombre del directorio superior si no ha cambiado primero al directorio relevante. Para estar seguro, sin embargo, intente primero el comando más corto
find . -type f ! -regex '.*/[ -.0-~]*'
y asegúrese de que solo enumere los archivos que desea eliminar. La expresión regular (regexp, o regex) aquí coincidirá con cualquier nombre de ruta que termine en una barra inclinada seguida de cualquier combinación de caracteres ASCII imprimibles /
, excluyendo , los caracteres de espacio son el primero tal y ~
el último, mientras .
y 0
rodean /
en la secuencia ASCII.
Una advertencia entre muchas: no sé con certeza si su ubicación actual podría cambiar la secuencia de clasificación de caracteres y, por lo tanto, tal vez cambiar el significado de la expresión regular. No creo que lo haga, pero si lo hace, ejecute los comandos como
LC_COLLATE=C find …
Debería eliminar el peligro.
Otra advertencia más: asegúrese de tener una copia de seguridad antes de intentar esto. No me responsabilizaré por ninguna pérdida de datos si se equivoca. ¡La línea de comando es una gran herramienta para dispararte en el pie! A veces solo un espacio fuera de lugar puede significar un desastre. (En este caso, por ejemplo, perder el espacio único después del soporte izquierdo es mortal).
find -name ’*ü*' -print
?