次のコマンドを使用して、特定のホストのすべてのACLを読み取ろうとします。
getfacl -R /
私が望むのは、各ACLでgroupAを見つけ、groupAがある場合はgroupBに変更し、それ以外の場合は無視することです。
getfacl -R / | setfacl -g:groupB dir
上記は私には適していませんが、誰でも私に方向を教えてくれてありがとう。
答え1
まず、2番目のコマンドが間違っています。
ディレクトリのACLを変更するには、groupBを許可します。読み書き権限:
setfacl -m g:groupB:rwx dir
第二に、コマンドが大丈夫であっても問題が発生します。
groupAがある場合はgroupBに変更します。
man setfacl
例に示すように、ACLをあるファイルから別のファイルにコピーする方法があります。
getfacl file1 | setfacl --set-file=- file2
問題を解決する方法の1つは、すべてのファイルを1つずつ確認し、sedを使用してgroupAをgroupBに変更し、変更されたACLを同じファイルにコピーすることです。これにより、ACLにgroupAが含まれている場合はgroupBに変わり、そうでないと何も起こりません。それは次のとおりです。
for file in $(find / -xdev) ; do getfacl $file | sed s/groupA/groupB/ | setfacl --set-file=- $file ; done
より効率的な解決策があるのか、それとも検索するだけで同じことを行う方法があるのかわかりません。