如何编写批量授权文件脚本

wen 实用脚本 2

本文目录导读:

如何编写批量授权文件脚本

  1. Linux/Unix 环境下的 Shell 脚本
  2. 文件和目录权限的批量管理
  3. Windows 批处理脚本
  4. Python 跨平台脚本
  5. 企业级批量授权配置
  6. PowerShell 脚本(Windows)
  7. 使用建议

我来介绍几种批量授权文件的脚本方法,涵盖不同场景:

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 设置权限"
}

使用建议

  1. 备份原有的权限配置,以防误操作
  2. 使用 --dry-run 先预览将要执行的操作
  3. 记录日志,便于追踪权限变更
  4. 分批执行,避免一次性处理过多文件
  5. 测试环境先行,先在非生产环境验证

根据具体需求选择适合的脚本方法,建议根据实际的目录结构和用户组织形式进行定制。

抱歉,评论功能暂时关闭!