Suponiendo que "extraño" significa "no un carácter ASCII", puede usarlo find
con un patrón para encontrar todos los archivos que no tienen caracteres ASCII imprimibles en sus nombres:
LC_ALL=C find . -name '*[! -~]*'
(El espacio es el primer carácter imprimible que aparece en http://www.asciitable.com/ , ~
es el último).
La sugerencia para LC_ALL=C
es obligatoria (en realidad, LC_CTYPE=C
y LC_COLLATE=C
), de lo contrario, el rango de caracteres se interpreta incorrectamente. Vea también la página del manual glob(7)
. Dado que LC_ALL=C
hace find
que las cadenas se interpreten como ASCII, imprimirá caracteres de varios bytes (como π
) como signos de interrogación. Para solucionar esto, diríjase a algún programa (por ejemplo cat
) o redirija a un archivo.
En lugar de especificar rangos de caracteres, [:print:]
también se puede usar para seleccionar "caracteres imprimibles". Asegúrese de establecer la configuración regional C o obtendrá un comportamiento bastante (aparentemente) arbitrario.
Ejemplo:
$ touch $(printf '\u03c0') "$(printf 'x\ty')"
$ ls -F
dir/ foo foo.c xrestop-0.4/ xrestop-0.4.tar.gz π
$ find -name '*[! -~]*' # this is broken (LC_COLLATE=en_US.UTF-8)
./x?y
./dir
./π
... (a lot more)
./foo.c
$ LC_ALL=C find . -name '*[! -~]*'
./x?y
./??
$ LC_ALL=C find . -name '*[! -~]*' | cat
./x y
./π
$ LC_ALL=C find . -name '*[![:print:]]*' | cat
./x y
./π