다음 명령을 실행하려고 합니다.
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. {} \;