"version" 및 "version.h"와 일치하는 파일 glob

"version" 및 "version.h"와 일치하는 파일 glob

find저장소에서 이름이 "version" 또는 "version.h"인 모든 파일을 식별 하려고 하는데 일치하는 유효한 glob을 제공할 수 없습니다.

정규식을 사용하면 이것이 효과가 있을 것이라고 믿습니다..*/version\.*h*

하지만 동등한 glob 구문을 알아낼 수 없습니다.

답변1

하지만 동등한 glob 구문을 알아낼 수 없습니다.

일반 글로브에는 교대 또는 그룹화가 없기 때문에 할 수 없다고 생각합니다. 그것은 당신이 얻을 수 있는 가장 가까운 것이지만 version*, 물론 다른 것과도 일치합니다.

ksh 스타일 확장 glob 또는 zsh를 사용하더라도 다음을 수행할 수 있습니다.

(딸꾹질)

$ shopt -s globstar
$ shopt -s extglob
$ echo **/version?(.h)

(크쉬)

$ set -o globstar
$ echo **/version?(.h)

(zsh)

% echo **/version(|.h) 

많은 버전에서는 find정규식을 사용할 수도 있지만 사용 가능한 정규식 변형은 다양합니다. BSD는 find기본적으로 기본 정규식(BRE)을 사용하지만 -E다음 플래그를 사용하여 확장 정규식을 지원합니다.

$ find -E . -regex ".*/version(\.h)?"

findGNU 에서기본값이 다릅니다(*) , 하지만:

$ find . -regextype posix-extended -regex ".*/version(\.h)?"

또는 Jeff가 제안한 간단한 솔루션을 사용할 수 있습니다.

$ find . -name version -o -name version.h

하지만 명시적으로 추가하면행동(기본적으로 인쇄하는 대신) 다음과 같은 대괄호가 필요합니다.

$ find . \( -name version -o -name version.h \) -a -exec ls -ld {} +

as -a(생략된 경우 암시됨)가 보다 우선합니다 -o.

(* 실제로 GNU find 참조 매뉴얼에서는 기본 정규식 형식이 무엇인지 확인할 수 없는 것 같습니다. 비교마지막 두 항목은 여기에 있습니다..)

관련 정보