이 find 명령이 ASCII가 아닌 문자 만 포함하는 파일 이름을 반환하지 않는 이유는 무엇입니까?

자이드

find명령이 작동하지 않는 근본 원인을 확인하려고합니다 . this_should_not_match아래에 있는 파일과 일치하지 않아야 합니다.

$ > find . -type f -name "*[^ -~]*"
./__º╚t
./this_should_not_match
./__╞_u
./__¡VW
./__▀√Z
./__εè_
./__∙Σ_
./__Σ_9
./__Σhm
./__φY_

내 쉘은 Bash 3.2입니다.

스테판 샤젤 라스

범위는 C 로케일에서만 안정적이고 이식 가능하게 작동합니다. 다른 로케일에서는 약간의 변형이 있지만 일반적으로 종종 모호하고 항상 사용하는 것과 같지는 않은 정렬 순서로 전후 [x-y]정렬되는 문자 (실제로 배열 요소, 문자 시퀀스와 일치 할 수 있음)를 얻습니다 .xysort

C 로케일 ( “LC_ALL = C”는 무엇을합니까? 참조 )에서 문자는 바이트이고 범위는 문자의 코드 포인트 (바이트 값)를 기반으로합니다.

LC_ALL=C find . -type f -name "*[^ -~]*"

ASCII 기반 시스템 (대부분, POSIX는 C 로케일이 ASCII 문자 집합을 사용하도록 보장하지 않지만 실제로는 EBCDIC 기반 특수 IBM 메인 프레임 OS를 사용하지 않는 한 (하지만 알고있을 것입니다)) , ASCII를 사용할 것입니다) 이름에 32에서 126 사이의 바이트가 아닌 다른 바이트가 포함 된 일반 파일을 나열합니다.

또한 멀티 바이트 문자 로케일 (예 : UTF-8, 요즘 표준)에서는 *일부 시스템에서와 같이 모든 파일 이름과 일치하지 않을 수도 있으며 유효한 문자를 형성하지 않는 바이트 시퀀스와 일치하지 않을 수도 있습니다. .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관