Zai*_*aid 3 bash character-encoding find unicode files
我正在尝试确定此find
命令不起作用的根本原因;它不应该与this_should_not_match
下面调用的文件匹配:
$ > find . -type f -name "*[^ -~]*"
./__º?t
./this_should_not_match
./__?_u
./__¡VW
./__??Z
./__?è_
./__??_
./__?_9
./__?hm
./__?Y_
Run Code Online (Sandbox Code Playgroud)
我的外壳是 Bash 3.2
范围仅在 C 语言环境中可靠且可移植地工作。在其他语言环境中,您会得到一些变化,但通常[x-y]
会得到一些字符(实际上是整理元素,它甚至可以匹配字符序列)以某种排序顺序x
在前后y
排序,这通常是模糊的,并不总是与sort
使用的相同。
在 C 语言环境中(请参阅“LC_ALL=C”做什么?),字符是字节,范围基于字符的代码点(基于字节值)。
LC_ALL=C find . -type f -name "*[^ -~]*"
Run Code Online (Sandbox Code Playgroud)
在基于 ASCII 的系统上(大多数;POSIX 不保证 C 语言环境使用 ASCII 字符集,但在实践中,除非您在某些基于 EBCDIC 的特殊 IBM 大型机操作系统上(但随后您会知道它) ,您将使用 ASCII) 将列出名称包含 32 到 126 之间的字节以外的字节的常规文件。
另请注意,在多字节字符区域设置(如 UTF-8 区域设置,现在的规范)中,*
甚至可能不匹配某些系统上的所有文件名,它将无法匹配不构成有效字符的字节序列.