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)
globstar
Bash를 사용하려면 이 옵션을 명시적 으로 설정해야 합니다 **
.
shopt -s globstar
답변2
vinc17의 제안 외에도 다음과 같이 --include
와 함께 사용할 수 있습니다 -r option
.
grep -r --include \foo some_pattern /path/to/dir/*.