디렉터리의 모든 요소를 반복적으로 그룹화하려면 소유자에게 동일한 권한을 설정해야 합니다.
답변1
상당히 간단한 대답이 있습니다(모든 버전의 *nix에서 작동하는지 확실하지 않지만).
chmod g=u *
즉, 설정G그룹 권한은 다음과 같습니다.너서비스 권한.
이 내용은 다음과 같이 기록됩니다.수정(1):
기호 패턴의 형식은 [
ugoa
...][[+-=
][파마...]...], 어디파마세트에 0개 이상의 문자가 있습니다.rwxXst
, 또는 세트의 단일 문자ugo
. …︙
이 편지들
rwxXst
선택하다…. 문자 중 하나만 지정할 수 있지만 하나 이상은 지정할 수 없습니다.ugo
: 파일을 소유한 사용자에게 권한을 부여합니다(u
), 파일 그룹(g
), 위의 두 범주에 속하지 않는 사용자에게 권한을 부여합니다(o
).
답변2
(최근 sed
) -z
GNU 시스템에서는 다음을 수행할 수 있습니다:
find . ! -type l -printf '%m:%p\0' |
sed -Ez '/^.?(.)\1.:/d;s/(.)(.)(.):/\1\1\2\x0/' |
xargs -r0n2 echo chmod
echo
(결과가 만족스러우면 삭제하세요.)
특수 비트가 아닌 r
, w
, 비트 만 처리한다는 점에 유의하세요 .x
재귀적이기를 원하지 않는 경우:
find . -mindepth 1 -maxdepth 1 ! -type l -printf '%m:%p\0' |
sed -Ez '/^.?(.)\1.:/d;s/(.)(.)(.):/\1\1\2\x0/' |
xargs -r0n2 echo chmod
답변3
이 시도:
for file in $(find .); do
perm=$(stat -c "%a" ${file});
echo chmod ${perm:0:1}${perm:0:1}${perm:2:1} ${file};
done
삭제하는 것을 잊지 마세요 echo
.
향상된 버전:
find . -exec sh -c 'for file do
perm=$(stat -Lc "%a" "$file")
echo chmod "${perm:0:1}${perm:0:1}${perm:2:1}" "$file"
done' sh {} +
에서와 같이Stefan Chazeras의 답변,
- 를 사용할
-mindepth 1
때 처리를 피하십시오.
. -maxdepth 1
(하위 디렉터리로) 재귀를 방지하는 데 사용됩니다 .! -type l
심볼릭 링크 처리를 피하는 데 사용됩니다 (이 답변은 심볼릭 링크를 정상적으로 처리하지만).
이 명령은 상위 모드 비트(setuid, setgid 및 Sticky)가 설정된 파일에서는 올바르게 작동하지 않습니다.