"Yabancı" nın "ASCII karakteri değil" anlamına geldiğini varsayarsak, find
adlarında yazdırılabilir ASCII karakterleri olmayan tüm dosyaları bulmak için bir kalıpla kullanabilirsiniz :
LC_ALL=C find . -name '*[! -~]*'
(Boşluk listelenen ilk yazdırılabilir karakterdir http://www.asciitable.com/ , ~
sonuncusu.)
Bunun için ipucu LC_ALL=C
gerekli (aslında LC_CTYPE=C
ve LC_COLLATE=C
), aksi takdirde karakter aralığı yanlış yorumlanır. Ayrıca kılavuz sayfasına bakınız glob(7)
. Yana LC_ALL=C
nedenleri find
ASCII olarak dizeleri yorumlamak, bu (örneğin multi-byte karakterleri yazdırır π
soru işaretleri gibi). Bunu düzeltmek için bir programa cat
yönlendirin (örn. ) Veya dosyaya yönlendirin.
Karakter aralıkları belirlemek yerine [:print:]
"yazdırılabilir karakterleri" seçmek için de kullanılabilir. C yerel ayarını ayarladığınızdan emin olun veya tamamen (görünüşte) keyfi bir davranış elde edin.
Örnek:
$ 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
./π