这不是我想做的事情。我只是想解决已经发生的问题。
我们现场的其中一个激光雷达系统返回了一个包含重复文件的数据收集驱动器。驱动器上的每个文件都有第二个重复文件,其名称、时间、日期和大小完全相同。据我所知,这应该是不可能的。
这些文件是在 Linux PC(CentOS 7)上编写的,但它们存储在 NTFS 上。这是因为它们是在 Windows PC 上处理的。多年来,我们一直运行此软件并使用相同类型的驱动器。
我尝试思考这种情况可能发生的原因,但想不出任何原因。如果两个存储软件实例以某种方式运行,它们会争夺同一个文件,而不是在同一个目录中写入相同的文件。这应该是不可能的。
然后我想,Windows 文件资源管理器显示文件可能是偶然的。我让他们把驱动器取出,放进另一台电脑,它仍然显示相同的内容。然后我想知道是否有隐藏的字符。然而,当他们将数据传输到他们的服务器时,它识别出文件名是相同的,并提示他们跳过或覆盖每个重复项。
我会认为这只是一个意外,但客户坚持要查明真相。有人能给我一些见解,甚至理论来解释为什么会发生这种情况吗?
答案1
我曾见过这种情况:一个文件有常规的“a”(ASCII 0x61),另一个文件有非常相似的“西里尔小写字母 a”(U+0430)。西里尔字母表中有许多字符看起来与拉丁字母一模一样(“e”、“o”是另外两个常见字符)(*)。
识别问题(和坏人)的一种方法是:dir
或者ls
用十六进制编辑器记录并查看输出(在 Linux 中,您也可以使用更简短的ls * | hd
:)。
据我所知,也可以在文件名中使用Unicode“零宽度空格(U + 200B)”字符。
(*)我在该答案的文本中隐藏了一些内容……