Cygwin

Cygwin:獲取路徑的儲存大小寫

  • July 18, 2020

Cygwin 以 Windows 的方式不區分大小寫,例如:

$ touch ABC; rstr=$(openssl rand -base64 12); echo $rstr; echo $rstr > AbC; cat abc
dGRMOHqqoy0/nc96
dGRMOHqqoy0/nc96

$ ls | grep -i abc
ABC

文件或目錄名稱中的字元大小寫被儲存,但在對其進行操作時會被忽略。

ABCAbC然後abc選擇相同的文件。

對於給定的文件路徑或目錄路徑,是否有一種可靠的方法來獲取*儲存的大小寫?*grep 技巧很快變得非常麻煩。

zsh中,並打開extendedglob選項,您可以執行以下操作:

$ set -o extendedglob
$ printf '%s\n' (#i)path/to/file
Path/to/FILE

path/to/file與儲存的案例一起獲得。

ksh93

$ printf '%s\n' ~(i)path/to/file
Path/to/FILE

(請注意,如果沒有匹配,它將擴展為~(i)path/to/file,ksh93 沒有與 nomatchor選項等效的選項,儘管當它不匹配時failglob您可以使用它來擴展為空)~(Ni)path/to/file

bash,和選項上extglob,您可以執行以下操作:failglob``nocaseglob

$ shopt -s extglob failglob nocaseglob
$ printf '%s\n' @(path)/@(to)/@(file)
Path/to/FILE

沒有extglob,你也可以做printf '%s\n' [p]ath/[t]o/[f]ile,雖然這更難可靠地自動化。

(在任何情況下,shell 下的功能等同於 your ls | grep -i,也就是說,它必須讀取完整的目錄內容才能找到匹配的文件。請注意,與 for 一樣grep -i,大小寫比較是根據語言環境進行的,它可能與方式不同NTFS 進行大小寫比較)

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