Bash

不區分大小寫的目錄搜尋?

  • November 19, 2020

我正在重組幾個現有文件夾的文件夾結構。因此,如果缺少任何文件夾,我將不得不添加它。

首先使用 if 命令檢查目錄是否存在,如果不存在則創建一個。由於它區分大小寫,我最終再次創建相同的文件夾。

範例:帶有 ABC 的文件夾已經存在,但正在使用 abc 檢查,因此再次使用 abc 創建一個新文件夾,有時文件夾存在於 Abc。

代替

if [ -d abc ] ; then
   echo 'Directory exists'

採用

if /bin/ls -d [aA][bB][cC]/ &> /dev/null ; then
   echo 'Directory exists'

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

這裡使用兩個bashshell 選項nullglobnocaseglob來測試是否[a]bc/存在任何與模式匹配的目錄,不區分大小寫。該nullglob選項確保在沒有匹配的情況下刪除模式(否則保持未擴展),並且nocaseglob使模式匹配不區分大小寫。

我們使用[a]bc/而不是僅abc針對目錄呼叫文件名匹配。[a]我們強制 shell 執行 globbing,從而獲取所有匹配的名稱,並且使用尾隨/我們將匹配限制為僅目錄。將此作為參數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/

引用自:https://unix.stackexchange.com/questions/456919