Bash
Bash萬用字元不擴展
我正在嘗試為目錄中的每個文件創建一個目錄。
mkdir *
返回文件存在。所以我嘗試
mkdir *.d
它創建了一個名為“*.d”的目錄。如何強制萬用字元擴展?
萬用字元始終擴展為現有名稱。
您的命令
mkdir *
失敗,因為*
擴展為的名稱已經存在。您的命令
mkdir *.d
“失敗”,因為*.d
與任何現有名稱都不匹配。因此,該模式在預設情況下保持未擴展1並創建一個名為的目錄*.d
。您可以使用 刪除它rmdir '*.d'
。為目前目錄中的每個正常文件創建一個目錄,以便新目錄與文件具有相同的名稱,但帶有
.d
後綴:for name in ./*; do if [ -f "$name" ]; then # this is a regular file (or a symlink to one), create directory mkdir "$name.d" fi done
或者,對於喜歡“單線”的人來說,
for n in ./*; do [ -f "$n" ] && mkdir "$n.d"; done
在
bash
,你也可以做names=( ./* ) mkdir "${names[@]/%/.d}"
但這不會檢查 glob 擴展為的內容是正常文件還是其他文件。
上述命令中的首字母
./
是為了防止文件名中包含初始破折號 (-
) 的文件名。破折號及其後面的字元將被解釋為mkdir
.1 一些 shell 有一個
nullglob
shell 選項,可以將不匹配的 shell 萬用字元擴展為空字元串。在bash
此使用shopt -s nullglob
.