Bash
不區分大小寫的目錄搜尋?
我正在重組幾個現有文件夾的文件夾結構。因此,如果缺少任何文件夾,我將不得不添加它。
首先使用 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
這裡使用兩個
bash
shell 選項nullglob
和nocaseglob
來測試是否[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/