특정 그룹의 파일을 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