【问题标题】:Best Method to Detect Whether a File System is Case Senstive检测文件系统是否区分大小写的最佳方法
【发布时间】: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


【解决方案1】:
[ -e "${PWD^^}" ] && echo "Case insensitive" || echo "Case sensitive"

Converting string case in Bash shell scripting

【讨论】:

  • 如果$PWD 已经全部大写,这不会告诉你任何事情。
  • 感谢您的回复,但不幸的是我应该指定我也不能依赖特定于 bash 的功能。
猜你喜欢
  • 2010-11-20
  • 2011-12-13
  • 2020-01-16
  • 1970-01-01
  • 2012-03-24
  • 2010-09-30
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
相关资源
最近更新 更多