터미널에서 마스크로 모든 파일 목록 가져오기

터미널에서 마스크로 모든 파일 목록 가져오기

예를 들어 마스크가 정의된 폴더에서 모든 파일을 *.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

관련 정보