我试图在stackoverflow上标记一个类似于我的问题(在Linux文件系统上查找非UTF8文件名)以引出进一步的答复,到目前为止没有运气,所以这里再次......
我和上面链接中的 OP 有同样的问题,convmv 是修复自己文件系统的好工具。因此,我的问题是学术性的,但我发现“查找”无法找到非标准的 ascii 字符这一点令人不满意(实际上我无法相信)。
有没有人知道使用什么选项组合来查找包含非标准字符的文件名的文件名似乎是 unicode FS,在我的情况下,字符似乎是 8 位扩展的 ascii 而不是 unicode,文件来自一台 Windows 机器(iso-8859-1),我经常需要获取它们。我很想看看 find 和/或 grep 如何与 convvv 做同样的事情。
示例文件:
> ls
Abc?def ÉÈéèáà-rest everest éverest
> ls -b
Abc\251def ÉÈéèáà-rest everest éverest
Run Code Online (Sandbox Code Playgroud)
第一个文件来自 Windows(或用 模拟touch $(printf "Abc\xA9def")
)。
> find . -regex '.*[^a-zA-Z./].*'
./ÉÈéèáà-rest
> ls | egrep '[^a-zA-Z]'
ÉÈéèáà-rest
Run Code Online (Sandbox Code Playgroud)
几乎全部都丢失了(连字符保存了该文件,可以用彩色 grep 看到)。这里发生的一切都不是我所期望的:find 和 grep 都无法将重音字母视为超出提供的范围 [^a-zA-Z./]。
> find . -regex '.*é.*'
./éverest
./ÉÈéèáà-rest
> ls | egrep 'é'
ÉÈéèáà-rest
éverest
> …
Run Code Online (Sandbox Code Playgroud)