不区分大小写的目录搜索?

use*_*020 1 bash directory shell-script case-sensitivity

我正在努力重组少数现有文件夹的文件夹结构。因此,如果缺少任何文件夹,我将不得不添加它。

首先使用 if 命令检查目录是否存在,如果不存在则创建一个。由于区分大小写,我最终再次创建相同的文件夹。

示例:一个带有 ABC 的文件夹已经存在,但正在使用 abc 进行检查,因此再次使用 abc 创建了一个新文件夹,有时文件夹存在与 abc。

Kus*_*nda 5

bash

shopt -s nullglob nocaseglob
set -- [a]bc/
if [ "$#" -gt 0 ]; then
    echo 'There is at least one directory called "abc" (case ignored):'
    printf '\t%s\n' "$@"
fi
Run Code Online (Sandbox Code Playgroud)

两个bashshell 选项nullglobnocaseglob在这里用于测试是否[a]bc/存在任何与模式匹配的目录,不区分大小写。该nullglob选项确保在没有匹配项时删除模式(否则不展开),并且nocaseglob使模式匹配不区分大小写。

我们使用[a]bc/而不仅仅是abc调用与目录匹配的文件名。随着[a]我们迫使外壳进行通配,从而拿起所有匹配的名称,并与后/我们限制了只能匹配到的目录。将此作为参数set设置位置参数为匹配的目录名称。然后可以在$@中找到这些匹配项,并且可以在中找到匹配项的数量$#

测试:

$ mkdir abc aBc ABc   # create three directories with only case diffs in their names
$ touch abC           # ... and also a file

$ bash ./script.sh
There is at least one directory called "abc" (case ignored):
        ABc/
        aBc/
        abc/
Run Code Online (Sandbox Code Playgroud)