폴더 및 모든 상위 디렉터리에 대한 읽기 및 쓰기 권한 설정

폴더 및 모든 상위 디렉터리에 대한 읽기 및 쓰기 권한 설정

rootsubfolderN까지 디렉토리와 모든 상위 폴더에 대한 사용자의 읽기 및 쓰기 권한을 설정해야 합니다 root.

나는 그것을 손으로 할 수 있다:

$ sudo chmod +rx /root/subfolder1/subfolder2/subfolderN
$ sudo chmod +rx /root/subfolder1/subfolder2
$ sudo chmod +rx /root/subfolder1
$ sudo chmod +rx /root

하지만 크면 N질려요. 하나의 명령으로 이를 자동화하는 방법은 무엇입니까?

답변1

이 작업은 하위 디렉터리에서 시작하여 위로 이동하면서 셸에서 쉽게 수행할 수 있습니다.

f=/root/subfolder1/subfolder2/subfolderN
while [[ $f != / ]]; do chmod +rx "$f"; f=$(dirname "$f"); done;

이는 설정한 파일/디렉토리에서 시작하여 "/"(또는 루프 조건에서 설정한 문자열)를 만날 때까지 각 상위 디렉터리에서 작동합니다. "/"를 chmod하지 않습니다. f루프 조건의 및 디렉터리가 절대 경로인지 확인하세요 .

답변2

, , , , 또는 :csh​​tcshkshzshbashfishyash -o braceexpand

sudo chmod +rx /root{,/subfolder1{,/subfolder2{,/subfolderN}}}

그리고 zsh:

f=/root/subfolder1/subfolder2/subfolderN
until [[ $f = / ]] {chmod +rx $f; f=$f:h;}

또는 다음과 같이 glob 한정자 함수를 정의할 수 있습니다.

explode() {
  reply=()
  until [[ $REPLY = [./] ]] {
    reply+=$REPLY
    REPLY=$REPLY:h
  }
}

예를 들어 다음과 같이 사용됩니다.

$ echo chmod +rx subfolder1/subfolder2/subfolderN(+explode)
chmod +rx subfolder1 subfolder1/subfolder2 subfolder1/subfolder2/subfolderN  

umask의 영향을 받는다는 점에 유의하세요 chmod +rx. umask이를 포함하지 않으면 디렉토리 를 누구나 읽을 수 있고 접근할 수 007있게 됩니다 . 이는 나쁜 생각입니다. 일반적으로 수퍼유저에게는 개인적인 것이므로 공개하는 것은 좋지 않습니다./root/root

답변3

뭘 하고 싶은지 모르겠지만 그게 너보다 낫다재귀를 과소평가하지 마세요. 즉, 실제 답변을 읽어보십시오.

흠... 재귀를 사용하면 어떨까요?

sudo chmod -R +rx /root

또는 마음에 들지 않으면 chmod여러 디렉토리를 제공할 수 있습니다.

sudo chamod +rx /root /root/subfolder1 /root/subfolder1/subfolder2 /root/subfolder1/subfolder2/subfolderN

답변4

음, 다음과 같이 약간 더 복잡한 작업을 수행할 수 있습니다.

echo "/root/subfolder1/subfolder2/subfolderN" | 
 perl -anF'/' -e 'while($#F>0){@b=join("/",@F);`chmod +rx @b`; pop @F}' 

이것이 무엇을 하는지 보려면 호출을 chmodprint로 바꾸십시오.

$ echo "/root/subfolder1/subfolder2/subfolderN" | 
 perl -alnF'/' -e 'while($#F>0){@b=join("/",@F);print "chmod +rx @b"; pop @F}' 
chmod +rx /root/subfolder1/subfolder2/subfolderN
chmod +rx /root/subfolder1/subfolder2
chmod +rx /root/subfolder1
chmod +rx /root

관련 정보