本文目录导读:

我来介绍几种批量授权文件的脚本方法,涵盖不同场景:
Linux/Unix 环境下的 Shell 脚本
批量修改文件权限
#!/bin/bash
# 批量授权脚本 - 根据文件类型设置不同权限
# 设置目录下所有 .sh 文件为可执行
find /path/to/directory -name "*.sh" -exec chmod +x {} \;
# 批量设置所有普通文件为 644,目录为 755
find /path/to/directory -type f -exec chmod 644 {} \;
find /path/to/directory -type d -exec chmod 755 {} \;
# 递归更改整个目录树的所有者
chown -R username:group /path/to/directory
# 批量给特定用户组授权
chgrp -R developers /path/to/project
chmod -R g+rwx /path/to/project
根据用户列表批量授权
#!/bin/bash
# 从文件读取用户列表并授权
# users.txt 格式:每行一个用户名
while read user; do
sudo usermod -aG sudo "$user"
echo "已将 $user 添加到 sudo 组"
done < /path/to/users.txt
# 批量创建并授权用户
for user in user1 user2 user3; do
useradd -m -s /bin/bash "$user"
echo "$user:初始密码" | chpasswd
chmod 700 /home/$user
done
文件和目录权限的批量管理
使用 ACL 批量授权
#!/bin/bash
# 使用 ACL 给多个用户授予特定文件和目录的权限
# 给多个用户授予特定目录的读权限
for user in alice bob charlie; do
setfacl -m u:$user:r-- /data/reports/
done
# 给多个用户授予可执行权限
for user in developer1 developer2; do
setfacl -m u:$user:rwx /var/www/html/
done
# 批量复制权限
getfacl /reference/file | setfacl --set-file=- /target/file
Windows 批处理脚本
@echo off
REM Windows 批量授权脚本
REM 批量设置文件只读属性
for %%f in (*.txt *.docx *.xlsx) do (
attrib +r "%%f"
echo 已将 %%f 设置为只读
)
REM 批量授予用户权限(需要管理员权限)
icacls C:\path\to\folder /grant "domain\user:(OI)(CI)F" /T
REM 批量处理多个目录
for %%d in (folder1 folder2 folder3) do (
icacls "C:\%%d" /grant "everyone:R" /T
)
Python 跨平台脚本
#!/usr/bin/env python3
"""
跨平台批量授权脚本
"""
import os
import sys
import stat
from pathlib import Path
def batch_chmod(base_dir, file_pattern="*", mode=0o644):
"""批量修改文件权限"""
base_path = Path(base_dir)
for file_path in base_path.rglob(file_pattern):
if file_path.is_file():
os.chmod(file_path, mode)
print(f"修改权限: {file_path} -> {oct(mode)}")
def batch_make_executable(directory):
"""批量设置可执行权限"""
for file_path in Path(directory).glob("*.sh"):
file_path.chmod(file_path.stat().st_mode | stat.S_IEXEC)
print(f"已设置为可执行: {file_path}")
def update_directory_permissions(root_dir):
"""更新目录权限"""
for root, dirs, files in os.walk(root_dir):
# 目录设置 755
for d in dirs:
os.chmod(os.path.join(root, d), 0o755)
# 文件设置 644
for f in files:
os.chmod(os.path.join(root, f), 0o644)
print(f"已处理: {root}")
if __name__ == "__main__":
# 使用示例
batch_make_executable("./scripts")
update_directory_permissions("./project")
企业级批量授权配置
#!/bin/bash
# 综合批量授权脚本示例
# 配置环境
BASE_DIR="/var/www/production"
LOG_FILE="/var/log/permission_changes.log"
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# 定义授权策略
declare -A PERMISSIONS=(
["web"]="apache:apache:755:644" # dir_owner:dir_group:dir_mode:file_mode
["bin"]="root:root:755:755"
["data"]="developer:developers:770:660"
)
# 主授权函数
apply_permissions() {
local dir="$1"
local owner="$2"
local group="$3"
local dir_mode="$4"
local file_mode="$5"
if [ ! -d "$dir" ]; then
log "错误: 目录 $dir 不存在"
return 1
fi
# 递归设置文件和目录权限
find "$dir" -type d -exec chmod "$dir_mode" {} \;
find "$dir" -type f -exec chmod "$file_mode" {} \;
chown -R "$owner:$group" "$dir"
log "已应用权限: $dir ($owner:$group $dir_mode/$file_mode)"
}
# 主执行逻辑
main() {
log "开始批量授权..."
for dir in "${!PERMISSIONS[@]}"; do
IFS=':' read -r owner group dir_mode file_mode <<< "${PERMISSIONS[$dir]}"
apply_permissions "$BASE_DIR/$dir" "$owner" "$group" "$dir_mode" "$file_mode"
done
# 额外处理特殊目录(如临时上传目录)
chmod 777 "$BASE_DIR/uploads"
chmod +t "$BASE_DIR/uploads" # sticky bit
log "批量授权完成!"
}
main
PowerShell 脚本(Windows)
# 批量授权脚本
$basePath = "C:\Projects"
$users = @("用户1", "用户2", "用户3")
foreach ($user in $users) {
$path = Join-Path $basePath $user
# 创建用户目录
if (-not (Test-Path $path)) {
New-Item -ItemType Directory -Path $path -Force
}
# 设置权限
$acl = Get-Acl $path
$permission = "$env:USERDOMAIN\$user", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($permission)
$acl.SetAccessRule($accessRule)
Set-Acl $path $acl
Write-Host "已为用户 $user 设置权限"
}
使用建议
- 备份原有的权限配置,以防误操作
- 使用 --dry-run 先预览将要执行的操作
- 记录日志,便于追踪权限变更
- 分批执行,避免一次性处理过多文件
- 测试环境先行,先在非生产环境验证
根据具体需求选择适合的脚本方法,建议根据实际的目录结构和用户组织形式进行定制。