여러 작업을 수행하는 여러 조건을 사용하여 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
다시 호출되지만 find
inode는 여전히 캐시되어 있을 가능성이 높으므로 그만한 가치가 있습니다. chgrp
통화를 에 병합하여 저장할 수 있습니다 chown
.
find "$target" -exec chown "$owner:$project" {} + \
-exec chmod "$perms" {} + \
-type d -exec chmod g+s {} +