我想使用以下脚本循环遍历/ Volumes / Volume-B / Exchange中的所有子文件夹并应用这些ACL和权限更改,但不将它们应用于/ Volumes / Volume-B /交换父文件夹。
在子文件夹中循环的某种循环是我被困的地方......
关于如何实现这一点的建议非常赞赏!
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH
DEST=/Volumes/Volume-B/Exchange
LOG=/var/log/fixperms-exchange.log
{
echo ""
echo "Begin Fixing perms on $DEST at `date`"
chmod -R +a "studiostaff allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" "$DEST"
chmod -R +a "studiostaff inherited allow read,write,execute,delete,append,readattr,writeattr,readextattr,writeextattr,readsecurity" "$DEST"
chown -R padmin:staff "$DEST"
echo "Permissions fix complete at `date`"
echo ""
} >> $LOG 2>&1
答案 0 :(得分:0)
只需使用简单的for循环:
for DIR in $DEST/*
do
chmod -R +a ... $DIR
done
这不应该更改DEST
本身的任何权限,只能更改其子项。
答案 1 :(得分:0)
无需循环浏览文件。递归地将ACL应用于文件层次结构就像使用find
:
# Export environment variable
PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH
# Initialise timestamp & variables
dest=/Volumes/Volume-B/Exchange
serv_log=/var/log/fixperms-exchange.service.log
ts=$(date +%T_+%F);
# About to fix permissions
echo '[$ts] : about to fix permissions' >> $serv_log;
# Find all sub directories of parent and chown/chmod -R
find $dest/* -type d -maxdepth 1 -mindepth 1 -exec chown -R padmin:staff {} \; -exec chmod -R +a "studiostaff allow list,..." {} \; -exec chmod -R +a "studiostaff allow read,..." {} \;
# Finished fixing permissions
echo '[$ts] : completed permissions task' >> $serv_log;
find
找到$dest
(-type d -maxdepth 1 -mindepth 1
)的所有直接子目录。对于每次调用实用程序,-exec utility [argument ...] {}
(man find
)将被尽可能多的路径名替换。适用于名称中包含NUL字符的文件名。
答案 2 :(得分:0)
您可以在没有循环的情况下执行此操作:
chmod -R +a "..." /Volumes/Volume-B/Exchange/*
答案 3 :(得分:-1)
你试过这个:
DEST='/Volumes/Volume-B/Exchange/*'
这与-R开关一起应该对父目录的内容应用所有更改。