그룹이 있는 chmod 파일 - (가 있는 파일에 오류가 있습니다.

그룹이 있는 chmod 파일 - (가 있는 파일에 오류가 있습니다.

특정 그룹의 파일을 chmod해야 합니다. 나는 다음과 같은 구조를 생각해 냈습니다.

find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;

이것은 작동하지만 파일 이름에 괄호(또는)가 포함되어 있으면 실패합니다.

어떤 아이디어가 있나요?

답변1

보간을 사용하는 방식으로 인해 파일 이름이 인용되지 않으므로 설명하는 방식으로 실패하는 {}running 과 약간 비슷합니다 .chmod u=rw some(filename).txt

{}한 가지 해결책은 인용된 문자열을 find자체적으로 올바르게 처리할 수 있도록 이동 하는 것입니다 .

chmod또 다른 문제는 명령을 내부 부분 su과 외부 부분 으로 분할하는 것 같다는 것입니다 . ( sh로 대체하여 이를 시연합니다 echo.) 결과적으로 명령이 손상되어 달성하려는 목표가 무엇인지 완전히 확신할 수 없습니다.

다음을 시도해 보세요( echo원하는 작업이 수행되고 있다고 확신하면 삭제하세요).

su -c "
    find . -group groupname -exec echo chmod -R u+w,go+r,go-w {} \;
"

chmod그룹이 있는 모든 디렉토리에 정말로 재귀를 적용할 건가요 groupname? 어쩌면 -type d술어 세트를 고려해야 할 수도 있습니다 .

답변2

IFS예를 들어, 변수를 로 설정 해야 합니다 $(echo -en "\n\b").

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;
IFS=$SAVEIFS

관련 정보