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)?"
find
GNU 에서기본값이 다릅니다(*) , 하지만:
$ 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 참조 매뉴얼에서는 기본 정규식 형식이 무엇인지 확인할 수 없는 것 같습니다. 비교마지막 두 항목은 여기에 있습니다..)