예를 들어 마스크가 정의된 폴더에서 모든 파일을 *.h
찾고 싶습니다 . 따라서 파일을 개별적으로 찾을 수 있습니다 .*.cpp
*/trunk/src*
*.h
*.cpp
find . -path "*/trunk/src/*.h"
find . -path "*/trunk/src/*.cpp"
*.h
두 가지 유형(AND ) *.cpp
의 파일 목록을 얻는 가장 좋은 방법은 무엇입니까 ?
PS 목록을 grep
.
답변1
-o
"또는"을 사용할 수 있습니다 .
find . -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp'
이는 다음과 같습니다.
find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \)
이 파일에 대해 grep을 실행하려면 다음을 수행하십시오.
find . \( -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp' \) -exec grep PATTERN {} +
또는
find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \) -exec grep PATTERN {} +
답변2
배쉬에서 열기글로벌 스타하위 디렉터리의 모든 수준과 일치 하는 옵션입니다 **
. 에서 ksh 확장 모드를 활성화 할 수 있습니다 ~/.bashrc
. 옵션도 켜십시오 .extglob
shopt -s globstar extglob
그 다음에:
grep PATTERN **/trunk/src/**/*.@(h|cpp)
4.2 이하의 bash 버전은 .bashrc 를 사용할 때 디렉토리에 대한 심볼릭 링크를 따릅니다 **
.
Zsh를 사용하면 이 작업이 더 쉬워집니다. 옵션을 설정할 필요 없이 다음만 입력하면 됩니다.
grep PATTERN **/trunk/src/**/*.(h|cpp)
명령줄이 너무 길고 Linux 또는 GNU grep을 사용하는 다른 플랫폼을 사용하는 경우 grep
셸 대신 recurse를 사용하여 명령줄 길이를 절약할 수 있습니다.
grep -R --include='*.cpp' --include='*.h' PATTERN **/trunk/src