나는 완전한 파일 저장소를 가지고 있으며 특정 기준과 일치하는 파일 목록을 얻으려고 합니다.
foo1
예를 들어, 경로에 문자열이 포함 되고 또는 foo2/foo3
포함되지 않는 모든 파일을 가져오고 싶다고 가정해 보겠습니다 . 또는 의 하위 디렉토리 일 수 있습니다 . 이 경우 해당 디렉토리도 있어야 합니다.bar1
bar2/bar3
bar1
bar2/bar3
foo*
들어오지 못하게 하다. 나는 다음을 시도했다:
IN_REGEX="$1"
OUT_REGEX="$2"
find . -name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX
나는 이 스크립트를 다음과 같이 부릅니다.
./script "/foo1/\|/foo2\/foo3/" "/bar1/\|/bar2\/bar3/"
그러나 루프는 실행되지 않습니다. "
명령줄 매개변수 를 '
. grep
s를 다음과 같이 명령으로 변경해 보았습니다 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