【发布时间】:2013-10-18 15:15:04
【问题描述】:
正如标题所说,我正在寻找最可靠的方法来检测文件系统是否区分大小写,提供给定的路径。
过去我使用过以下肮脏的伎俩:
[ -e "/tmp" -a -e "/Tmp" ] && echo "Case insensitive" || echo "Case sensitive"
这很有效,因为系统通常不会同时拥有 /tmp 和 /Tmp 文件夹。当然,这充其量只是 hacky,并且对于任意路径没有用处,因为它可能指向没有任何文件夹的设备。
我想的是做一些事情,比如获取路径的目录(应该存在)并以某种方式“翻转”它的大小写(所以大写字母变成小写,反之亦然),但我不知道该怎么做要么;我可以从低到高翻转,但是如果目录的名称已经全部大写,那将没有任何用处。
无论如何,我正在寻找有关检测文件系统是否区分大小写的最佳方法的建议,最好尽可能不创建临时文件。
【问题讨论】:
-
您可以检查一个合适的常规文件(如有必要,创建)文件名的全小写和全大写版本引用相同的 inode,如果两者都存在(并且您的文件系统使用 inode ; 否则替换现有的任何机制来检查两个名称是否引用同一个文件)。
-
不幸的是我也不能这样做,因为路径可能不可写。您的 inode 比较想法仍然适用于我提供的路径,同时使用大写和小写版本,但我无法将它们与指向同一个 inode 的两个硬链接区分开来,它仍然比我所拥有的更好至少远!
标签: shell filesystems