![](/img/trans.png)
[英]How to iterate through folders and subfolders to delete n number of files randomly?
[英]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.