재귀 적으로 Chmod


249

다른 사람이 보관 한 보관소가 있는데 다운로드 한 후 자동으로 추출 된 파일 내에서 파일 시스템의 분기를 변경하여 읽기 액세스 권한을 얻고 싶습니다. (아카이브 작성 방법을 변경할 수 없습니다).

이 스레드를 살펴 보았습니다. chmod : 다른 사용자와 마찬가지로 이미 실행 권한이있는 파일에만 반복적으로 실행 권한을 추가하는 방법 .

디렉토리는 원래 여러 개의 잘못된 플래그와 함께 제공되며 다음과 같이 나타날 수 있습니다.

drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--

그것들은 내가 지금까지 발견 한 몇 안되는 것이지만 더 많을 수 있습니다.

findx권한 없이 디렉토리를 보려고 할 때 오류가 발생하여에 전달하지 않습니다 chmod. 내가 지금까지 한 일은 상위 디렉토리에 대한 권한을 수동으로 변경 한 다음 하위 디렉토리로 이동하여 동일하게 수행하는 것입니다. 그러나 이것은 많은 노동입니다. 자동으로 수행 할 수있는 방법이 없습니까?

즉, 내가 지금하고있는 방법 :

하다:

$ chmod -R +x
$ chmod -R +r

오류가 없을 때까지

$ find -type f -exec chmod -x {} +

그러나 더 좋은 방법이 있어야합니다.


3
-r
PJ Brunet

답변:


131

디렉토리를 나열하려면 읽기 액세스와 액세스 실행이 필요합니다. 실행 액세스 권한 만있는 경우 디렉토리에서 항목 이름을 찾을 수 있지만 다른 정보는 없습니다 (유형도 아니므로 어떤 항목이 하위 디렉토리인지 알 수 없음). 이것은 나를 위해 작동합니다 :

find . -type d -exec chmod +rx {} \;

2
'\;'의 차이점은 무엇입니까 명령 끝에 OP가 사용한 '+'?
kon psych

1
@konpsych 분명히 +다른 방식으로 명령 행을 작성합니다. 나는 실제로 그것을 알지 못했습니다. \;검색과 일치하는 파일 당 하나의 명령으로 일반적인 방법입니다.
Fred Foo

일부 파일 이름에 공백이 있으면 작동하지 않습니다.
Soonts

3
@Soonts 그런 다음 "{}"대신 {}수정해야합니다.
user4642212

Windows 10의 Linux 하위 시스템에서 이것을 실행했으며 그 반대 효과가있었습니다. 대부분의 파일 권한이 제거되었습니다.
Max Candocia

176

chmod를 X 모드 문자 (대문자 X) 하여 디렉토리에 대해서만 실행 가능 플래그를 설정할 수 있습니다.

아래 예제에서 실행 가능 플래그는 지워지고 모든 디렉토리에 대해 재귀 적으로 설정됩니다.

~$ mkdir foo
~$ mkdir foo/bar
~$ mkdir foo/baz
~$ touch foo/x
~$ touch foo/y

~$ chmod -R go-X foo 
~$ ls -l foo
total 8
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

~$ chmod -R go+X foo 
~$ ls -l foo
total 8
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

약간의 설명 :

  • chmod -x foo-eXecutable 플래그를 지우십시오.foo
  • chmod +x foo- 설정된 실행 성 (eXecutable) 플래그를foo
  • chmod go+x foo-위와 동일하지만 그룹기타 사용자에 대해서만 플래그를 설정 하고 사용자를 터치하지 마십시오 (소유자) 권한을
  • chmod go+X foo -위와 동일하지만 디렉토리에만 적용되며 파일을 만지지 마십시오.
  • chmod -R go+X foo-위와 동일하지만, 모든 하위 디렉토리에 대해 재귀 적 으로 수행foo

80

모든 권한을 동시에 변경하십시오.

chmod -R +xr

그러면 모든 비 디렉토리에도 실행 권한이 부여됩니다.
Fred Foo

1
예. 이것은 첫 번째 반복 단계를 대체합니다. find -type f -exec chmod -x {} +그 후에도 여전히 달려야 합니다.
choroba

50

소유자가 쓰기 가능한 모든 것을 만들려면 그룹이 읽고 실행하고 월드 실행 파일을 작성하십시오.

chmod -R 0755

모든 것을 넓게 열려면 :

chmod -R 0777

12
현재 폴더 위치를 추가하십시오.chmod -R 0777 .
Danijel

18

확장자가 있는 현재 폴더 내의 모든 파일 (폴더가 아닌)에 실행 가능 권한을 재귀 적 으로 sh추가 :

find . -name '*.sh' -type f | xargs chmod +x

* 파이프 ( )에 주목|


2

현재 경로에서 시작하는 모든 파일과 디렉토리에 0777을 지정하십시오.

chmod -R 0777 ./

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.