【问题标题】:How to enable case sensitivity in checking the file name in shell script如何在检查 shell 脚本中的文件名时启用区分大小写
【发布时间】:2016-03-25 10:49:09
【问题描述】:

我想使用 shell 脚本检查文件是否存在。我使用了下面的代码。 如果我有 TEST.png 或 test.png,如果条件成功并打印找到文件,则为这两个文件名。但我想为文件检查启用区分大小写。请让我知道如何在 shell 脚本中启用区分大小写。

    file="/mnt/floppy/test.png"
    if [ -f "$file" ]
    then
         echo "File found"

    else
         echo "Invalid file" 
    fi     

【问题讨论】:

  • Shell/bash 默认区分大小写
  • 根据您要检查的文件路径判断,您正在处理不区分大小写的文件系统,可能是 VFAT。

标签: bash shell sh


【解决方案1】:

看看 VFAT 的区分大小写的挂载选项:

check=s: 严格,区分大小写

check=r: 轻松,不区分大小写

check=n:正常,默认设置,当前不区分大小写


来源:https://www.kernel.org/doc/Documentation/filesystems/vfat.txt

【讨论】:

    【解决方案2】:

    你可以使用grep:

    file="/mnt/floppy/test.png"
    echo $file | grep [A-Z] && echo "Invalid file: Filename has uppercase letters" && exit 1
    # echo file | grep [a-z] && echo "Valid file"
    

    【讨论】:

    • 另外(因为有人肯定会提到这一点)您可以使用 POSIX 字符类 [[:upper:]][[:lower:]] 而不是 [A-Z][a-z]
    • 您可以完全在 shell 中执行此操作; case $file in *[A-Z]*) echo Uppercase;; esac -- 但问题似乎是关于查找文件是否存在,而不考虑变量中文件名的大小写变化,这是一个相当困难的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2013-07-05
    • 2015-06-13
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多