Recursive ACL script
Jump to navigation
Jump to search
Recursive ACL script
You may use/adapt one of the following bash scripts to recursively add or remove ACL attributes using gpfs built-in commands
Courtesy of Gabriel Devenyi
#!/bin/bash
# USAGE
# - on one directory: ./set_acl.sh aclfile dir_name
# - on more directories: ./set_acl.sh aclfile dir1_name dir2_name ...
#
# Based on a contributed script by Gabriel Devenyi.
#
set -euo pipefail
aclfile="$1"
shift
for dir in "$@"
do
find "${dir}" -type d -exec mmputacl -i "${aclfile}" {} \; -exec mmputacl -d -i "${aclfile}" {} \;
find "${dir}" -type f -exec mmputacl -i "${aclfile}" {} \;
done
Courtesy of Agata Disks
(http://csngwinfo.in2p3.fr/mediawiki/index.php/GPFS_ACL)
This script is a bit more verbose and precise in its error messages
#!/bin/bash
# USAGE
# - on one directory: ./set_acl.sh dir_name
# - on more directories: ./set_acl.sh 'dir_nam*'
#
# Path of the file that contains the ACL
ACL_FILE_PATH=/agatadisks/data/acl_file.acl
# Directories onto the ACLs have to be set
dirs=$1
# Recursive function that sets ACL to files and directories
set_acl () {
curr_dir=$1
for args in $curr_dir/*
do
if [ -f $args ]; then
echo "ACL set on file $args"
mmputacl -i $ACL_FILE_PATH $args
if [ $? -ne 0 ]; then
echo "ERROR: ACL not set on $args"
exit -1
fi
fi
if [ -d $args ]; then
# Set Default ACL in directory
mmputacl -i $ACL_FILE_PATH $args -d
if [ $? -ne 0 ]; then
echo "ERROR: Default ACL not set on $args"
exit -1
fi
echo "Default ACL set on directory $args"
# Set ACL in directory
mmputacl -i $ACL_FILE_PATH $args
if [ $? -ne 0 ]; then
echo "ERROR: ACL not set on $args"
exit -1
fi
echo "ACL set on directory $args"
set_acl $args
fi
done
}
for dir in $dirs
do
if [ ! -d $dir ]; then
echo "ERROR: $dir is not a directory"
exit -1
fi
set_acl $dir
done
exit 0