如何在 macOS 上使用“find”查找包含不可打印字符的文件名?

问题描述 投票:0回答:1

macOS 上的某些文件夹具有存储在名为

Icon?
的文件中的自定义图标,其中
?
实际上是
CR
字符,并且仅打印为“?”大多数情况下(在终端和 Finder 中)。

但是当在终端中以十六进制打印这样的文件名时,你会得到:

$ ls -l1 Icon* | xxd
00000000: 4963 6f6e 0d0a         Icon..

0d
是名称末尾的
CR
0a
是每行末尾的
ls
打印的LF。

现在,我喜欢使用

find
来查找此类文件。

我认为这就是方法:

find -E . -iregex ".*/Icon\x0d"

也不:

find -E . -iregex ".*/Icon\r"

但是,这不会找到它。但这找到了它(使用

.
作为通配符):

find -E . -iregex ".*/Icon."

但是一般来说寻找十六进制字符是有问题的,因为这也不起作用:

find -E . -iregex ".*/\x49con."

\x49
I
的代码,所以这应该可行。

因此,如果您想自己尝试一下,请获取 any 文件并尝试使用带有 -regex 选项的

find
命令来查找它,并指定至少一个十六进制字符,例如使用正则表达式
\x61
或任何正确的内容查找名为“a”的文件。你能完成吗?

regex macos find
1个回答
0
投票

我认为正则表达式引擎不会解析十六进制转义序列。尝试在正则表达式中放入文字 CR 字符,使用

$'...'

find . -name $'Icon\r'
© www.soinside.com 2019 - 2024. All rights reserved.