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
파일이나 디렉터리 이름의 대소문자는 저장되지만 조작할 때는 무시됩니다.
ABC
을 AbC
선택한 다음 abc
동일한 파일을 선택합니다.
주어진 파일 경로나 디렉터리 경로의 대소문자를 얻는 안정적인 방법이 있습니까?다른 이름으로 저장하시겠습니까?grep 트릭은 매우 빠르게 매우 번거로워질 수 있습니다.
답변1
에서 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
(일치하는 항목이 없으면 로 확장됩니다 . ksh93에는 해당 항목 이나 옵션이 ~(i)path/to/file
없지만 일치 항목이 없으면 null로 확장하는 데 사용할 수 있습니다 .)nomatch
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
안정적으로 자동화하는 것이 더 어렵습니다.
(어쨌든 셸에서는 와 동일한 작업을 수행합니다 ls | grep -i
. 즉, 일치하는 파일을 찾으려면 전체 디렉터리 내용을 읽어야 합니다. for 와 마찬가지로 grep -i
대소문자 비교는 로케일별로 다르며 다른 NTFS 방식과 다를 수 있습니다. 사례 비교를 하세요)
답변2
정확히 귀하가 요청한 내용은 아니지만 귀하가 관심을 가질 만한 것일 수도 있습니다.
기억이 나지 않는 곳에 가져갔지만 효과가 있었습니다.
대소문자 구분 NTFS
Windows에서는 개별 폴더나 볼륨에 대해 대소문자 구분을 활성화할 수 없지만 전체 시스템에 대해서는 대소문자 구분을 활성화할 수 있습니다.
레지스트리 키 값을 변경해야 합니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive
1에서 0으로 시스템을 재부팅합니다.
이렇게 하면 다음 설치 로 posix=0
변경 해야 합니다 .posix=1
/etc/fstab
d:\cyg_pub /pub NTFS binary,posix=1,nouser 0 0
이후
$ cd /tmp
$ touch Pippo
$ touch PIppo
$ touch PIPpo
$ ls P*
Pippo PIppo PIPpo