다음 디렉토리 트리가 주어지면:
.
├── 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 {} \;