यह मानते हुए कि "विदेशी" का अर्थ "एएससीआईआई चरित्र नहीं" है, तो आप उन find
सभी फाइलों को खोजने के लिए एक पैटर्न के साथ उपयोग कर सकते हैं जिनके नाम में मुद्रण योग्य एएससीआईआई अक्षर नहीं हैं:
LC_ALL=C find . -name '*[! -~]*'
(अंतरिक्ष पहले प्रिंट करने योग्य पर सूचीबद्ध चरित्र है http://www.asciitable.com/ , ~
पिछले है।)
संकेत LC_ALL=C
की आवश्यकता है (वास्तव में, LC_CTYPE=C
और LC_COLLATE=C
), अन्यथा चरित्र श्रेणी की गलत व्याख्या की जाती है। मैनुअल पेज भी देखें glob(7)
। चूंकि ASCII के रूप में तारों की व्याख्या करने का LC_ALL=C
कारण find
है, इसलिए यह π
प्रश्न चिह्न के रूप में बहु-बाइट वर्ण (जैसे ) मुद्रित करेगा । इसे ठीक करने के लिए, कुछ प्रोग्राम (जैसे cat
) पर पाइप करें या फ़ाइल पर रीडायरेक्ट करें।
वर्ण श्रेणियों को निर्दिष्ट करने के बजाय, [:print:]
"मुद्रण योग्य वर्ण" का चयन करने के लिए भी उपयोग किया जा सकता है। सी लोकेल को सेट करना सुनिश्चित करें या आप काफी (प्रतीत होता है) मनमाना व्यवहार करें।
उदाहरण:
$ 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
./π