모든 cpp 파일을 찾고 이름이 패턴(정규식)과 일치하는 파일만 나열하는 것이 작동하지 않습니다.

모든 cpp 파일을 찾고 이름이 패턴(정규식)과 일치하는 파일만 나열하는 것이 작동하지 않습니다.

나는 완전한 파일 저장소를 가지고 있으며 특정 기준과 일치하는 파일 목록을 얻으려고 합니다.

foo1예를 들어, 경로에 문자열이 포함 되고 또는 foo2/foo3포함되지 않는 모든 파일을 가져오고 싶다고 가정해 보겠습니다 . 또는 의 하위 디렉토리 일 수 있습니다 . 이 경우 해당 디렉토리도 있어야 합니다.bar1bar2/bar3bar1bar2/bar3foo*들어오지 못하게 하다. 나는 다음을 시도했다:

IN_REGEX="$1"
OUT_REGEX="$2"

find . -name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX

나는 이 스크립트를 다음과 같이 부릅니다.

 ./script "/foo1/\|/foo2\/foo3/" "/bar1/\|/bar2\/bar3/"

그러나 루프는 실행되지 않습니다. "명령줄 매개변수 를 '. greps를 다음과 같이 명령으로 변경해 보았습니다 sed.

find . -name '*'.cpp | sed "\m%$IN_REGEX%" | sed "\%$OUT_REGEX%d"

이번에도 성공하지 못했습니다. 그러나 bash 쉘에서 직접 실행하려고 하면 grep. 잘 작동합니다. 나는 이것을 알아내려고 오늘 하루 종일을 보냈다.

누구든지 나를 도와줄 수 있나요?

답변1

!(부정) 및 -path명령 스위치를 사용하여 find이 작업을 수행 할 수 있습니다.

$ find . \( ! -path "*bar*" -a ! -path "*bar2\/bar3*" -a -path "*foo*" -print \)

bar폴더를 제외한 폴더 와 포함 폴더 bar2/bar3의 경로를 검색합니다 . foo시도 해봐. 구문은 find명령 버전에 따라 변경될 수 있습니다.

자세한 내용은 찾기 매뉴얼 페이지를 참조하세요..

답변2

매개변수를 받을 때 "라인 1과 라인 2"를 제거하면 작동하는 것 같습니다.

IN_REGEX=$1
OUT_REGEX=$2

find . -name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX

관련 정보