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