임의 깊이의 와일드카드

임의 깊이의 와일드카드

grep임의의 디렉토리 깊은 곳에 있고 /path/to/dir파일 이름의 위치를 ​​갖는 경로를 사용하고 싶습니다 foo. 임의 깊이의 와일드카드는 이라고 생각 **하고 시도해 보았습니다.

grep some_pattern /path/to/dir/**/foo

**그러나 해당 부분이 단일 디렉터리 깊이를 나타내는 파일 에만 일치하는 것 같습니다 .

/path/to/dir/bar/foo

/path/to/dir파일 이름이 있는 디렉터리에서 임의 깊이의 경로를 일치시키는 방법은 무엇입니까 foo?

답변1

zsh를 사용하세요. zshexpn(1) 매뉴얼 페이지의 "재귀 와일드카드" 섹션에서:

'(foo/)#' 형식의 경로 이름 구성 요소는 foo 패턴과 일치하는 0개 이상의 디렉터리로 구성된 경로와 일치합니다.

간단히 말해서 '**/'는 '(*/)#'과 동일합니다. 따라서 이는 현재 디렉터리와 하위 디렉터리의 파일과 일치합니다.

[...] 이 형식은 기호 링크를 따르지 않습니다. 대체 "***/"가 작동하지만 그 외에는 동일합니다.

이는 또한 **숨겨진 디렉터리(이름이 점으로 시작하는 디렉터리)가 기본적으로 포함되지 않음을 의미합니다. 일치시키려면 이 GLOB_DOTS옵션을 설정하거나 D 전역 한정자를 사용하세요.

grep some_pattern /path/to/dir/**/foo(D)

globstarBash를 사용하려면 이 옵션을 명시적 으로 설정해야 합니다 **.

shopt -s globstar

답변2

vinc17의 제안 외에도 다음과 같이 --include와 함께 사용할 수 있습니다 -r option.

grep -r --include \foo some_pattern /path/to/dir/*.

관련 정보