Якщо припустити, що "іноземний" означає "не символ 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
./π