find(-exec) 평가

find(-exec) 평가

문자열 집합 중 하나가 포함된 모든 파일을 검색하고 있습니다. 그렇다면 액세스 권한을 변경하겠습니다.

 find . -type f -exec grep -q '#!/bin/bash\|#!/usr/bin/grep\|#!/usr/bin/awk' {} \; -exec chmod 700 {} ;\

grep -qfind가 해당 문자열을 포함하는 파일을 찾았을 때 어떻게 작동하는지 궁금합니다. 0그래서 다른 exec가 실행되지만 실행되어서는 안 됩니다. 그 초는 exec모든 파일을 찾고 모든 파일에 대한 권한을 변경합니다. 왜 작동하고 해당 문자열이 포함된 파일만 변경합니까?

답변1

나는 당신의 의도가 무엇인지 잘 모르겠지만 (명확하게 밝히지 않았습니다) 패턴과 일치하는 모든 파일을 700으로 chmod하려면 철자 실수를 제외하고 ( ;\그렇지 않음 \;) 명령 의도적으로 다음과 같이 작동하는 것 같습니다.

하지만:

해당 문자열이 포함된 파일을 찾으면 실행되는 또 다른 exec가 grep -q표시 0되지만 실행되어서는 안 됩니다.

예, 그렇게 해야 합니다. 0은 성공을 의미하므로 find표현식 평가가 계속되고 두 번째 표현식이 -exec실행됩니다. 1(또는 0 이외의 값)은 실패가 false를 의미하므로 find평가가 단락되어(병렬 표현식 사이에 암시적 논리 AND가 있음) 두 번째 평가가 -exec실행되지 않음을 의미합니다.

왜 작동하는가?

GNU 맨페이지를 확인하세요 find.

식 1 식 2

한 줄에 있는 두 표현식은 암시적 "and"로 연결된 것으로 간주됩니다.식 2다음과 같은 경우 평가되지 않습니다.식 1가짜입니다.

관련 정보