Предполагая, что «иностранный» означает «не символ ASCII», вы можете использовать find
с шаблоном, чтобы найти все файлы, не имеющие печатаемых символов ASCII в их именах:
LC_ALL=C find . -name '*[! -~]*'
(Пробел - первый печатный символ, указанный на http://www.asciitable.com/ , ~
- последний.)
LC_ALL=C
Требуется подсказка для (собственно, LC_CTYPE=C
и LC_COLLATE=C
), иначе диапазон символов интерпретируется неправильно. Смотрите также страницу руководства glob(7)
. Так как LC_ALL=C
вызывает find
интерпретацию строк как ASCII, он будет печатать многобайтовые символы (такие как π
) как вопросительные знаки. Чтобы это исправить, направьте в какую-нибудь программу (например cat
) или перенаправьте в файл.
Вместо указания диапазонов символов [:print:]
также можно использовать для выбора «печатных символов». Обязательно установите локаль C, иначе вы получите (на первый взгляд) произвольное поведение.
Пример:
$ 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
./π