根据文件名创建目录名 - 删除非字母数字字符并将其变为小写

根据文件名创建目录名 - 删除非字母数字字符并将其变为小写

我能够根据文件的名称创建目录。如果文本中有空格或非字母数字字符,我就会遇到麻烦。我想删除那些非字母数字字符,并将剩余的字符转换为小写。这将生成目录的名称。我尝试运行了一些测试,但我甚至无法删除空格。

另外我可以限制为 25 个字符吗?

    __FILE_NAME="Test File@#!!.txt"
    echo ${__FILE_NAME// /_}
    $ echo $__FILE_NAME | tr '[:upper:]' '[:lower:]'
    mkdir -p $__PATH${__FILE_NAME};

答案1

使用bash

f="Test File@#!!.txt"
f="${f// /_}"
f="${f//[^[:alnum:].]/}"
f="${f,,?}"
mkdir -p "$__PATH$f"

解释:

  • f="${f// /_}"

    这会将所有空格替换为下划线。此处是否使用双引号是可选的。不过,除非您精通 shell 的许多特殊情况,否则最好在变量使用的所有地方都加上双引号。

  • f="${f//[^[:alnum:].]/}"

    这使用 bash 的另一个参数扩展来删除除句点之外的所有非字母数字字符。(我猜你可能想保留它们。)

    如果您还想删除句点,请将此行替换为:

    `f="${f//[^[:alnum:]]/}"`
    
  • f="${f,,?}"

    tr是将大写字母转换为小写字母的传统工具。此行改用 bash 的内置参数扩展之一来进行转换。

  • mkdir -p "$__PATH$f"

    除非有人希望 shell 处理 shell 变量,否则将它们放在双引号中会更安全。

相关内容