답변:
bash에서 재귀 글로브를 수행하려면 globstar
bash 버전 4 이상의 기능 이 필요합니다 .
bash 맨 페이지에서 :
globstar
If set, the pattern ** used in a pathname expansion context will
match all files and zero or more directories and subdirectories.
If the pattern is followed by a /, only directories and
subdirectories match.
예제 패턴의 경우 :
shopt -s globstar
ls **/*.py
nullglob
다음 경고를 읽는 것이 좋습니다.
wc -l {**,.}/*.py
작동합니다
find . -name '*.py'
** 하나 이상의 작업을 수행하지 않습니다 * 모두 현재 디렉토리에서 작동합니다
find
bash 4가 없다면 할 수있는 일이 많이 있습니다 . 예 : yourcommand `find . -name '*.py'`
(백틱 참고); find . -name '*.py' -exec yourcommand {} \;
.
Bash 4 (zsh도 포함) 이후 패턴을 설정할 때 패턴을 다르게 처리 하는 새로운 글 로빙 옵션 ( globstar
)이 추가되었습니다 **
.
와일드 카드 패턴을 일치시키고 명령의 와일드 카드 패턴을 일치하는 항목으로 바꾸어 일치하는 파일 및 디렉토리 이름을 리턴합니다.
일반적으로을 사용할 때 **
와 비슷하게 작동 *
하지만 루프와 같이 모든 디렉토리를 재귀 적으로 재귀합니다.
활성화되어 있는지 확인하려면 shopt globstar
(스크립팅에서)을 사용 하여 확인하십시오 shopt -q globstar
.
이 예제 **.py
는 재귀 할 수있는 디렉토리 목록을 리턴하지 않으므로 현재 디렉토리에서만 작동하므로 여러 디렉토리 레벨 와일드 카드를 사용해야 **/*.py
하므로 더 깊이 들어갈 수 있습니다.
제발 SO에 찾아 내가 재귀 적으로 모든 파일을 찾기 위해 한 몇 가지 구문 테스트를.
nullglob