여러 실행자에 대한 여러 조건 찾기

여러 실행자에 대한 여러 조건 찾기

여러 작업을 수행하는 여러 조건을 사용하여 find 명령을 작성하려고 합니다. 누군가 효율성을 높이려면 find 명령을 사용해야 한다고 제안했습니다. 이것이 내가 가진 것입니다:

    find $target \
            \( ! -group $project -exec chgrp $project "{}" \;       \) , \
            \( ! -user $owner -exec chown $owner "{}" \;            \) , \
            \( ! -perm "$perms" -exec chmod "$perms" "{}" \;        \) , \
            \( -type d -exec chmod g+s "{}" \; \)

뭔가 하는 것 같지만 다음과 같은 결과를 얻습니다.

찾기: 잘못된 표현

그리고

(: 명령어를 찾을수 없음

실행하려는 스크립트에서

답변1

오류 메시지는 (명령으로 실행된다는 것을 나타냅니다. 이는 줄을 계속하는 데 사용되는 백슬래시 중 하나가 실제로 줄의 마지막 문자가 아님을 의미합니다. 공백이 없는지 확인하십시오. Unix 줄 끝(LF만, CR 없음)을 사용하고 있는지 확인하세요.

find잘못된 표현에 대한 불만은 이러한 쉼표 때문입니다. 그냥 삭제하세요.

find "$target" \
        \( ! -group "$project" -exec chgrp "$project" {} \;   \) \
        \( ! -user "$owner" -exec chown "$owner" {} \;        \) \
        \( ! -perm "$perms" -exec chmod "$perms" {} \;        \) \
        \( -type d -exec chmod g+s {} \; \)

파일당 한 번이 아니라 파일 배치당 한 번씩 명령을 실행하여 시간을 절약할 수 있습니다. 여기서는 보장할 chown수 없으며 chgrp호출 chmod속도가 다를 수 있으므로 디렉토리 항목이 캐시에서 제거될 수 있지만 시도해 보겠습니다.

find "$target" \
        \( ! -group "$project" -exec chgrp "$project" {} +   \) \
        \( ! -user "$owner" -exec chown "$owner" {} +        \) \
        \( ! -perm "$perms" -exec chmod "$perms" {} +        \) \
        \( -type d -exec chmod g+s {} + \)

chgrp, 파일에 이미 올바른 메타데이터가 있는 경우 아무 작업도 수행하지 않으므로 무조건 호출할 수 있습니다 chmod. chown그러나 불필요하게 실행하면 더 많은 호출이 발생합니다. 이 작업을 수행한 후 유틸리티가 stat다시 호출되지만 findinode는 여전히 캐시되어 있을 가능성이 높으므로 그만한 가치가 있습니다. chgrp통화를 에 병합하여 저장할 수 있습니다 chown.

find "$target" -exec chown "$owner:$project" {} + \
        -exec chmod "$perms" {} + \
        -type d -exec chmod g+s {} +

관련 정보