Dengan asumsi bahwa "asing" berarti "bukan karakter ASCII", maka Anda dapat menggunakan find
dengan pola untuk menemukan semua file yang tidak memiliki karakter ASCII yang dapat dicetak atas namanya:
LC_ALL=C find . -name '*[! -~]*'
(Spasi adalah karakter yang dapat dicetak pertama yang tercantum di http://www.asciitable.com/ , ~
adalah yang terakhir.)
Petunjuk untuk LC_ALL=C
diperlukan (sebenarnya, LC_CTYPE=C
dan LC_COLLATE=C
), jika rentang karakter ditafsirkan salah. Lihat juga halaman manual glob(7)
. Karena LC_ALL=C
sebab find
untuk menafsirkan string sebagai ASCII, itu akan mencetak karakter multi-byte (seperti π
) sebagai tanda tanya. Untuk memperbaiki ini, pipa ke beberapa program (misalnya cat
) atau redirect ke file.
Alih-alih menentukan rentang karakter, [:print:]
juga dapat digunakan untuk memilih "karakter yang dapat dicetak". Pastikan untuk mengatur lokal C atau Anda mendapatkan perilaku yang cukup (tampaknya) sewenang-wenang.
Contoh:
$ 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
./π