繁体   English   中英

遍历子文件夹并运行

[英]Loop through subfolders and run

我想使用以下脚本循环遍历/ Volumes / Volume-B / Exchange中的所有子文件夹,并应用这些ACL和权限更改,但不将其应用于/ Volumes / Volume-B / Exchange父文件夹。

我被困在子文件夹中的某种循环...

关于如何实现这一点的建议深表感谢!

#!/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

只需使用一个简单的for循环:

for DIR in $DEST/*
do
    chmod -R +a ... $DIR
done

这不应更改DEST本身(仅其子级)的任何权限。

无需循环浏览文件 递归地将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字符的文件名,可以正常工作。

您可以按以下步骤进行循环:

chmod -R +a "..." /Volumes/Volume-B/Exchange/*

您是否尝试过:

DEST='/Volumes/Volume-B/Exchange/*'

该选项与-R开关一起应将所有更改应用于父目录的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM