"-o" 및 "-exec chown"을 사용한 "찾기"가 예상대로 작동하지 않습니다.

"-o" 및 "-exec chown"을 사용한 "찾기"가 예상대로 작동하지 않습니다.

다음 명령을 실행하려고 합니다.

find . -user user_name -o -group user_group -exec chown root. {} \;

그러나 명령을 실행한 후에는 파일의 소유권이 변경되지 않습니다. -exec 없이 실행하면 올바르게 수정하려는 모든 파일 목록이 생성됩니다.

내가 사용하는 경우:

find . -user user_name -exec chown root. {} \; find . -group user_group -exec chown root. {} \;

파일이 예상대로 업데이트되었습니다. 매뉴얼 페이지에서 다음을 볼 수 있습니다.

expr1 -o expr2
          Or; expr2 is not evaluated if expr1 is true.


expr1 -or expr2
          Same as expr1 -o expr2, but not POSIX compliant.

그러나 이러한 파일의 소유자는 입니다 user_name:user_group. 여기에서 뭔가 오해가 있지 않는 한 첫 번째 경우는 true로 평가되고 exec 명령을 실행해야 합니다. 왜 이런 일이 일어나는지 설명해 줄 수 있나요?

시스템 정보가 필요한 경우:

find(GNU findutils) 4.4.2 CentOS 버전 6.8(최종 버전)

답변1

구문의 논리 연산자는 우선 순위가 낮으며 find예제에서는 및 -o로 나눕니다 .-user user_name-group user_group -exec chown root. {} \;

다음을 확인하세요.

find . -user user_name -exec chown root. {} \; -o -group user_group -exec chown root. {} \;

중복을 방지하려면 괄호를 사용하여 두 테스트 표현식을 함께 평가하세요.

find . \( -user user_name -o -group user_group \) -exec chown root. {} \;

관련 정보