[linux] 재귀 적으로 Chmod

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

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

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

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

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

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

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

하다:

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

오류가 없을 때까지

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

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



답변

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

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


답변

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

답변

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

chmod -R +xr


답변

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

chmod -R 0755

모든 것을 넓게 열려면 :

chmod -R 0777


답변

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

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

* 파이프 ( )에 주목|


답변

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

chmod -R 0777 ./


답변