find 或 ls 未列出 MacOS (HFS+) 文件夹中的所有文件

find 或 ls 未列出 MacOS (HFS+) 文件夹中的所有文件

lsfind命令似乎无法找到特定文件夹中的所有文件。我正在运行 Mac(运行 El Capitan 10.11.6 (15G21013)、500GB SSD、HFS+)。在我的某个文件夹中,大约有 700k 个文件,我有一个可以打开的文件,如果我指定文件名,ls或将找到它。但是,在文件夹上应用或将无法找到该文件。这看起来像是 HFS+ 损坏吗?推荐使用哪些方法或工具来修复此类问题,同时将停机时间和文件系统风险降至最低?findlsfind

11:16:35 gyin@mymac:[~/]: ls dis/ASA.md
dis/ASA.md
11:19:06 gyin@mymac:[~/]: 查找 dis/ASA.md
dis/ASA.md
11:19:40 gyin@mymac:[~/]: 查找 dis | grep "ASA.md"
dis/CASA.md
dis/DASA.md
11:19:55 gyin@mymac:[~/]: ls dis | grep "ASA.md"
CASA.md
DASA.md
11:20:36 gyin@mymac:[~/]: 查找 dis | wc -l
  717004

更新:

根据 Kamil 的回答,这看起来不像是 Unicode 问题。

13:28:12 gyin@mymac:[~]: 查找 dis/ASA.md | xxd
00000000:6469 732f 4153 412e 6d64 0a dis/ASA.md。
13:28:25 gyin@mymac:[~]: echo dis/ASA.md | xxd
00000000:6469 732f 4153 412e 6d64 0a dis/ASA.md。
13:28:34 gyin@mymac:[~]:

答案1

可能的设想:

А来自西里尔字母还有A源自拉丁语。它们可能看起来一样,但编码却不同。

如果有问题的文件名中的第二个“A”不是拉丁文,你可能输入了类似

ls dis/AS

然后点击tab,你的 shell 会自动用西里尔字母填充名称,你甚至不知道其中的区别。你注意到这个方法ls有效。

接下来,您点击,进行内联编辑并变成lsfind不触及路径(它仍然包含非拉丁字符)。您注意到find它起作用了。

但是当你输入时grep,你ASA.md只能手动输入。输入的都是拉丁文,没有西里尔文。命令无法按预期工作。

我不是说这是A肯定的。我是说一个或多个角色可能不是你想象的那样。


find为了确认或排除这种情况,我将分析命令的十六进制输出这样可行

find dis/ASА.md | xxd

并与此命令进行比较手写

echo dis/ASA.md | xxd

注意:我的帖子确实在几个地方使用了西里尔字母,А所以不要盲目地复制和粘贴。


另一方面,您在问题正文中发布的文字代码似乎dis/ASA.md以连贯、仅使用拉丁语的方式使用。如果它是从终端复制的(不是独立输入的),那么我的假设可能不适用于您的特定情况。

相关内容