디렉토리의 권한과 소유자를 반복적으로 확인하고 이를 다시 생성하기 위한 쉘 스크립트를 작성하는 스크립트

디렉토리의 권한과 소유자를 반복적으로 확인하고 이를 다시 생성하기 위한 쉘 스크립트를 작성하는 스크립트

변경되거나 제대로 생성되지 않거나 이 디렉터리에 대한 사용자/권한을 다른 컴퓨터에 미러링하는 경우 여러 하위 디렉터리가 있는 큰 디렉터리의 모든 권한/그룹을 보존하고 다시 작성하기 위한 쉘 스크립트를 작성하려고 합니다.

다음과 같은 것 :

chown adam:brown /var/blarg
chmod 770 /var/blarg
chown adam:brown /var/blarg/toast.file
chmod 777 /var/blarg/toast.file

...etc

이것을 손으로 하면 시간이 오래 걸립니다. 이 작업을 수행하기 위한 기존 명령/스크립트가 있는지 궁금합니다.

답변1

@yeti 님의 댓글을 따라 얼마 전에 이것에 대해 생각해 보았고 다음과 같은 결론에 도달했던 것을 기억하는 것 같습니다.

find /path/to/dir -printf '%m\t%u\t%g\t%p\0' > filelist

그런 다음

while read -rd $'\0' perms user group file; do 
  if [ -e "$file" ]; then
    chown "$user:$group" "$file"
    chmod "$perms" "$file"
  else
    echo "warning: $file not found"
  fi
done < filelist

작동 할 것이다. 출력의 마지막에 파일 이름을 넣고 read개행 대신 null 종결자를 사용합니다.~해야 한다공백이나 기타 특수 문자가 포함된 파일 이름에도 안전합니다. 두 번째 명령을 실행하려는 위치에 따라 명령의 선행 구성 요소가 제거된 파일 이름을 사용하는 것이 더 편리 할 /path/to/dirfind있습니다 .%P%p

답변2

Yeti가 의견에서 제안한 대로 find 명령을 사용하여 디렉터리 내의 모든 파일과 디렉터리를 찾고 해당 권한/소유자를 chown 또는 chmod 명령으로 출력했습니다. -v결과 쉘 스크립트를 실행할 때 명령의 성공/오류를 볼 수 있도록 자세한 옵션을 추가했습니다 .

find /var/blarg -printf 'chown -v %u:%g %p\n' > chowns.sh
find /var/blarg -printf 'chmod -v %m %p\n' > chmods.sh

이제 결과 .sh 파일을 실행 가능하게 만드십시오.

chmod +x chowns.sh; chmod +x chmods.sh

그런 다음 이를 실행하고 자세한 피드백을 txt 파일로 출력합니다.

./chmods > chmods_results.txt

팔.

답변3

당신이 언급한 events경우,정말많은 파일을 살펴보는 것이 좋습니다. inotifywatch예를 들어 파일 권한 변경과 같은 "파일 시스템 이벤트를 수신하는" 을 살펴보는 것이 좋습니다 . 데비안 기반 OS에서는 package 에 있습니다 inotify-tools.

관련 정보