use*_*020 1 bash directory shell-script case-sensitivity
我正在努力重组少数现有文件夹的文件夹结构。因此,如果缺少任何文件夹,我将不得不添加它。
首先使用 if 命令检查目录是否存在,如果不存在则创建一个。由于区分大小写,我最终再次创建相同的文件夹。
示例:一个带有 ABC 的文件夹已经存在,但正在使用 abc 进行检查,因此再次使用 abc 创建了一个新文件夹,有时文件夹存在与 abc。
在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)
两个bash
shell 选项nullglob
和nocaseglob
在这里用于测试是否[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)