我是 unix 命令新手,但有需要。我有一个混合的 Win/Mac 环境,其中我使用 Win AD 作为用户帐户,并使用 Mac 作为文件存储。
Mac 上有一个命令可以自动为用户创建主文件夹,并在我的情况下设置适当的权限“createhomedir -s”。该命令的输出是:
creating home directories for (cloud.mc.net.mackillop)
created (/Network/Servers/cloud.mc.net.mackillop/data/18goodki/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/18langre/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/16gibsga/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/17gibssa/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/99bowmam/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/99newtal/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/99daypa/files)
然后,我还需要做的是对这些新创建的主文件夹设置额外的权限,以便为自己提供读/写访问权限以及 _www(Apache Web 主机),因为我们使用 OwnCloud.org 提供对用户文件的基于 Web 的云访问。
这是我为实现此目的而运行的两个命令:
sudo chmod -R +ai "_www allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" data
sudo chmod -R +ai "ittech allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" data
在所有用户和子文件夹的整个“数据”文件夹上运行这两个命令需要很长时间(973 个用户帐户!),并且确实会减慢服务器速度。我想要的只是从第一个命令开始对新创建的用户运行这两个命令,以大大减少时间和开销。
我一直在阅读 grep、awk 等内容,但不太确定如何实现这一点。
所以基本上我想开始createhomedir -s
运行,然后从该命令的输出中提取每个用户名,然后使用这些用户名来运行两个 chmod 来代替“data”文件夹(/data/%USERNAME% )。
答案1
很简单...只需将其包装在以下内容中(注意:我们假设创建位成功,并且 createhomedir 的输出位于 STDOUT 而不是 STDERR):
for i in $(createhomedir -s | grep -o 'data/[^\/]*' )
do
echo sudo chmod -R +ai "_www allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" $i
echo sudo chmod -R +ai "ittech allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" $i
done
如果您对命令的合理性感到满意,请去掉“echo”。