답변:
-path
옵션을 사용 하여 -not
연산자 를 찾아 조합 할 수 있습니다 .
find . ! -path "*/test/*" -type f -name "*.js" ! -name "*-min-*" ! -name "*console*"
두 가지 유의하시기 바랍니다
-path
첫 번째 논쟁으로 와야한다-path test
아무 것도 일치하지 않습니다.그건 그렇고, 왜 당신이 괄호를 사용하는지 확실하지 않습니다, 그것은 차이가 없습니다. 그것은 단지 같은 구조를 위해, 우선 순위에 사용되는 ! \( -name '*bla*' -name '*foo*' \)
(즉, 모두가 것들을 찾을 수없는 bla
과 foo
).
더 세분화 : bash 루프를 사용할 필요가 없으므로 간단히 할 수 있습니다.
find . ... -exec cat {} \; -exec echo \;
여기서 ...는 다른 인수 find
입니다.
find / -path ./test -prune -o ...
./test
테스트 디렉토리의 위치에 맞게 이름 을 바꾸십시오 .
다음과 같이 grep을 사용해 볼 수 있습니다 (여기서 폴더 이름은 test_folder 임).
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/path/to/test_folder/" | while read line
또는 찾기가 상대 경로를 반환하는 경우 :
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "./relative_path/to/test_folder/" | while read line
또는 이름은 같지만 경로가 다른 모든 폴더를 원하는 경우
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/test_folder/" | while read line
친애하는,
@CharlesClavadetscher
그의 대답에 대한 생각을 넓히기 위해. 경로를 생략하면 경로 -not -path ...
find가 계속 내려갑니다. 대신,를 사용 -prune
하면 생략 된 경로로 더 내려가는 것을 막아 더 빠르게 만듭니다. 그래서 당신은 같은 것을 할 수 있습니다
find . -path '*test/*' -prune -o -type f -name "*.js" ! -name "*-min*" ! -name "*console*" -print