문자열 집합 중 하나가 포함된 모든 파일을 검색하고 있습니다. 그렇다면 액세스 권한을 변경하겠습니다.
find . -type f -exec grep -q '#!/bin/bash\|#!/usr/bin/grep\|#!/usr/bin/awk' {} \; -exec chmod 700 {} ;\
grep -q
find가 해당 문자열을 포함하는 파일을 찾았을 때 어떻게 작동하는지 궁금합니다. 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가짜입니다.