다음 명령을 사용하여 특정 호스트의 모든 ACL을 읽으려고 합니다.
getfacl -R /
내가 원하는 것은 각 ACL에서 groupA를 찾아 groupA가 있으면 groupB로 변경하고 그렇지 않으면 무시하는 것입니다.
getfacl -R / | setfacl -g:groupB dir
위의 내용은 나에게 적합하지 않지만 누구든지 나에게 방향을 알려 주시면 감사하겠습니다.
답변1
첫째, 두 번째 명령이 잘못되었습니다.
디렉터리의 ACL을 변경하려면 groupB를 허용하세요.읽고 쓰기권한:
setfacl -m g:groupB:rwx dir
둘째, 명령이 괜찮더라도 문제가 발생합니다.
groupA가 있으면 groupB로 변경합니다.
man setfacl
예제에 표시된 대로 ACL을 한 파일에서 다른 파일로 복사하는 방법이 있습니다 .
getfacl file1 | setfacl --set-file=- file2
문제를 해결하는 방법 중 하나는 모든 파일을 하나씩 확인하고 sed를 사용하여 groupA를 groupB로 변경하고 변경된 ACL을 동일한 파일에 복사하는 것입니다. 이렇게 하면 ACL에 groupA가 있으면 groupB로 변경되고, 그렇지 않으면 아무 일도 일어나지 않습니다. 그것은 다음과 같습니다:
for file in $(find / -xdev) ; do getfacl $file | sed s/groupA/groupB/ | setfacl --set-file=- $file ; done
더 효율적인 솔루션이 있는지 아니면 찾기만으로 동일한 작업을 수행할 수 있는 방법이 있는지는 모르겠습니다.