답변:
GNU chmod
(Ubuntu) 단일 명령 변형 (현재 디렉토리에서 시작)을 사용하는 경우 :
chmod -R -x+X .
설명:
-R
-재귀 적으로 작동-x
-모든 사용자에 대한 실행 플래그 제거+X
-디렉토리 인 경우 모든 사용자에 대해 실행 가능 플래그 설정이 경우 X
모든 실행 가능 플래그가에 의해 지워 지므로 대문자 는 디렉토리에만 적용됩니다 -x
. 그렇지 않으면 +X
, 플래그가 원래 사용자, 그룹 또는 기타에 대해 설정된 경우에도 실행 가능 플래그를 설정합니다.
BSD chmod
(Mac OS X에 있음)를 사용하면 두 가지 명령으로 별도로 수행해야합니다.
sudo chmod -R -x * && sudo chmod -R +X *
(메인 디렉토리에도 숨겨진 파일을 포함 시키려면 *를. (포인트)로 변경해야하지만 테스트되지는 않았습니다.)
chmod -R a-x+X *
umask
허용하지 않는 경우 발생할 수 있습니다 x
. 기본값을 사용 umask
하거나 변경 했습니까? umask
명령 출력을 보내 주 시겠습니까? : 솔루션 외에도이 가능성도있다 chmod -R a-x,+X *
설정된 것입니다 x
당신에 따라 권한 umask
. 답변을 업데이트하지만 먼저 BSD / Mac OS X의 동작을 확인하고 싶습니다.
find
One Thing Well을 수행하는 간단한 도구를 결합하는 스타일이기 때문에 아래 답변 의 변형을 좋아합니다 .
.
대신 사용하십시오*
올바른 경로를 먼저 입력 한 경우 :
find . -type f -exec chmod -x {} \;
또는
chmod -x $(find . -type f)
find는 경로에서 'f'유형 (일반 파일을 의미 함)의 모든 파일을 찾습니다. 그런 다음 각 파일에서 chmod -x를 호출합니다. {}는 파일 이름과 \로 대체됩니다. chmod 명령을 종료합니다.
find
지원하는 경우 -exec ... \+
대신 대신 사용 하십시오 . + -exec ... \;
가 더 적습니다 . 그렇지 않으면을 사용하십시오 . fork
exec
find ... -print0 | xargs -0 ...
find . -type f -perm +111 -exec chmod -x {} \;
find
지원 이라면 -print0
나는 또한 그것을 지원할 것이라고 확신합니다-exec
chmod -x+X
방법 중 하나 우분투에 나를 위해 작동하지 않았다, 따라서 나는이 최소한의 파이썬 스크립트를 썼다 :
#!/usr/bin/python3
import os
for par, dirs, files in os.walk('.'):
for d in dirs:
os.chmod(par + '/' + d, 0o755)
for f in files:
os.chmod(par + '/' + f, 0o644)
파일 시스템에 소켓과 같은 멋진 추가 기능이 있으면 마지막 chmod를 try / catch로 둘러 쌀 수 있습니다.