Cygwin: 경로의 저장된 대문자 가져오기

Cygwin: 경로의 저장된 대문자 가져오기

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 트릭은 매우 빠르게 매우 번거로워질 수 있습니다.

답변1

에서 zshextendedglob옵션을 켜면 다음을 수행할 수 있습니다.

$ 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로 확장하는 데 사용할 수 있습니다 .)nomatchfailglob~(Ni)path/to/file

bash옵션 이 켜져 있으면 다음을 수행할 수 있습니다.extglobfailglobnocaseglob

$ 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

관련 정보