하위 디렉토리만 chmod하는 방법은 무엇입니까?

하위 디렉토리만 chmod하는 방법은 무엇입니까?

다음 디렉토리 트리가 주어지면:

.
├── d1
│   └── workspace
├── d2
│   └── workspace
├── d3
│   └── workspace
├── d4
│   └── workspace
└── d5
    └── workspace

workspace다음과 같이 모든 디렉터리에 대한 권한을 설정해야 합니다 .

chmod -R 774 d1/작업 공간
chmod -R 774 d2/작업 공간
...

하나의 명령으로 모든 디렉토리에 대해 위 작업을 어떻게 수행할 수 있습니까 workspace? 다음 명령을 실행할 수 있습니다.

chmod -R 774 *

그러나 이로 인해 상위 디렉터리의 스키마도 변경되므로 바람직하지 않습니다.

답변1

최상위 디렉터리에서는 와일드카드를 사용할 수 있습니다.

chmod 774 d*/workspace

또는 더 구체적으로 지정하려면 와일드카드를 예를 들어 뒤에 d숫자가 오도록 제한할 수도 있습니다.

chmod 774 d[0-9]/workspace

보다 일반적인 접근 방식은 find.

find d* -maxdepth 1 -name workspace -type d -exec chmod 774 "{}" \;

답변2

chmod명령에는 다음과 같이 디렉토리에 실행 비트를 설정하는 멋진 바로 가기가 있습니다.

chmod a+X *

이는 매우 편리하며 누구나 전체 디렉토리 트리를 읽을 수 있게 해주지만 일반 파일에 실행 비트를 설정하지는 않습니다.

chmod -R a+rX *

답변3

이와 같은 셸에서는 확장된 globbing 옵션을 사용하여 bash지정된 모든 디렉터리 workspace와 해당 디렉터리를 먼저 표시할 수 있습니다.chmod

shopt -s nullglob globstar

이 옵션은 nullglob전역 확장이 실행될 때 오류가 발생하지 않도록 하기 위한 것입니다.아니요경로에서 파일을 찾으십시오. 또한 이렇게 하면 빈 전역 문자열이 배열에 포함되지 않습니다. 이 globstar옵션은 재귀적 글로빙에 대해 활성화됩니다.

이제 쉘 배열에서 이러한 디렉토리를 다음과 같이 표시하십시오.

dirs=(**/workspace/)

또 다른 온전성 검사로 먼저 배열을 인쇄하여 필요한 모든 디렉토리가 처리되었는지 확인할 수 있습니다. 다음 명령을 실행할 때 아래에 모든 디렉터리가 나열되어 있는지 확인하고 printf(),

printf '%s\n' "${dirs[@]}"

그러면 배열이 모든 재귀 폴더로 채워집니다 . 이제 이를 workspace사용해야 합니다.chmod

(( "${#dirs[@]}" )) && chmod -R 774 -- "${dirs[@]}"

답변4

find . -mindepth 1 -type d -exec chmod 774 {} \;

관련 정보