ls
或find
命令似乎无法找到特定文件夹中的所有文件。我正在运行 Mac(运行 El Capitan 10.11.6 (15G21013)、500GB SSD、HFS+)。在我的某个文件夹中,大约有 700k 个文件,我有一个可以打开的文件,如果我指定文件名,ls
或将找到它。但是,在文件夹上应用或将无法找到该文件。这看起来像是 HFS+ 损坏吗?推荐使用哪些方法或工具来修复此类问题,同时将停机时间和文件系统风险降至最低?find
ls
find
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
有效。
接下来,您点击↑,进行内联编辑并变成ls
,find
不触及路径(它仍然包含非拉丁字符)。您注意到find
它起作用了。
但是当你输入时grep
,你ASA.md
只能手动输入。输入的都是拉丁文,没有西里尔文。命令无法按预期工作。
我不是说这是A
肯定的。我是说一个或多个角色可能不是你想象的那样。
find
为了确认或排除这种情况,我将分析命令的十六进制输出这样可行:
find dis/ASА.md | xxd
并与此命令进行比较手写:
echo dis/ASA.md | xxd
注意:我的帖子确实在几个地方使用了西里尔字母,А
所以不要盲目地复制和粘贴。
另一方面,您在问题正文中发布的文字代码似乎dis/ASA.md
以连贯、仅使用拉丁语的方式使用。如果它是从终端复制的(不是独立输入的),那么我的假设可能不适用于您的特定情况。