脚本怎样批量修改目录权限

wen 实用脚本 26

本文目录导读:

脚本怎样批量修改目录权限

  1. Bash Shell 脚本(Linux/Unix)
  2. Python 脚本
  3. Windows PowerShell 脚本
  4. 实用的组合脚本
  5. 使用说明
  6. 注意事项

批量修改目录权限可以通过多种脚本实现,以下是几种常见的脚本方法:

Bash Shell 脚本(Linux/Unix)

使用 find 命令批量修改

#!/bin/bash
# 修改指定目录下的所有目录权限为 755
find /path/to/directory -type d -exec chmod 755 {} \;
# 修改指定目录下的所有文件权限为 644
find /path/to/directory -type f -exec chmod 644 {} \;

递归修改目录权限

#!/bin/bash
target_dir="/path/to/directory"
# 只修改目录权限(不修改文件)
find "$target_dir" -type d -exec chmod 755 {} \;
# 同时修改目录和文件权限
find "$target_dir" -type d -exec chmod 755 {} \;
find "$target_dir" -type f -exec chmod 644 {} \;
echo "目录权限修改完成!"

使用 chmod 的 -R 参数(不区分文件和目录)

#!/bin/bash
# 递归修改所有文件和目录权限为 755
chmod -R 755 /path/to/directory
# 如果需要区分文件权限
chmod -R u+rwX,go+rX /path/to/directory
# 这个命令会保持目录可执行,但不给文件执行权限

Python 脚本

#!/usr/bin/env python3
import os
import stat
import sys
def batch_chmod(path, dir_mode=0o755, file_mode=0o644):
    """
    批量修改目录和文件权限
    :param path: 目标路径
    :param dir_mode: 目录权限(默认755)
    :param file_mode: 文件权限(默认644)
    """
    try:
        for root, dirs, files in os.walk(path):
            # 修改目录权限
            for d in dirs:
                dir_path = os.path.join(root, d)
                os.chmod(dir_path, dir_mode)
                print(f"修改目录权限: {dir_path} -> {oct(dir_mode)}")
            # 修改文件权限
            for f in files:
                file_path = os.path.join(root, f)
                os.chmod(file_path, file_mode)
                print(f"修改文件权限: {file_path} -> {oct(file_mode)}")
        print("权限修改完成!")
    except Exception as e:
        print(f"错误: {e}")
if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("用法: python script.py /目标目录路径")
        sys.exit(1)
    target_path = sys.argv[1]
    batch_chmod(target_path)

Windows PowerShell 脚本

# PowerShell 脚本:批量修改目录权限
$targetPath = "C:\TargetDirectory"
# 递归获取所有目录和文件
Get-ChildItem -Path $targetPath -Recurse | ForEach-Object {
    if ($_.PSIsContainer) {
        # 修改目录权限
        $_.Attributes = 'Directory'
        # 设置完整权限(这里需要设置具体的 ACL)
        $acl = Get-Acl $_.FullName
        $permission = "Everyone","FullControl","Allow"
        $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
        $acl.SetAccessRule($accessRule)
        Set-Acl $_.FullName $acl
        Write-Host "已修改目录: $($_.FullName)"
    } else {
        # 修改文件权限(示例:只读权限)
        $_.Attributes = 'ReadOnly'
        Write-Host "已修改文件: $($_.FullName)"
    }
}

实用的组合脚本

#!/bin/bash
# 交互式批量修改目录权限脚本
echo "=== 批量目录权限修改工具 ==="
# 获取目标路径
read -p "请输入目标目录路径: " target_dir
if [ ! -d "$target_dir" ]; then
    echo "错误:目录不存在!"
    exit 1
fi
# 选择权限模式
echo "请选择权限模式:"
echo "1) 目录 755,文件 644(推荐)"
echo "2) 目录 777,文件 666(开放权限)"
echo "3) 目录 700,文件 600(私有权限)"
echo "4) 自定义权限"
read -p "请选择 (1-4): " choice
case $choice in
    1)
        dir_perm=755
        file_perm=644
        ;;
    2)
        dir_perm=777
        file_perm=666
        ;;
    3)
        dir_perm=700
        file_perm=600
        ;;
    4)
        read -p "输入目录权限 (如 755): " dir_perm
        read -p "输入文件权限 (如 644): " file_perm
        ;;
    *)
        echo "无效选择!"
        exit 1
        ;;
esac
# 确认执行
echo "即将修改 $target_dir 下的所有目录权限为 $dir_perm,文件权限为 $file_perm"
read -p "确认执行?(y/n): " confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
    find "$target_dir" -type d -exec chmod "$dir_perm" {} \;
    find "$target_dir" -type f -exec chmod "$file_perm" {} \;
    echo "✅ 权限修改完成!"
else
    echo "❌ 操作已取消"
fi

使用说明

  1. 保存脚本:将上述脚本保存为 .sh(Linux)或 .py(Python)文件
  2. 添加执行权限(Linux):
    chmod +x script.sh
  3. 运行脚本
    ./script.sh /目标目录路径

注意事项

  • ⚠️ 修改系统目录权限可能导致系统不稳定
  • 💾 建议先备份重要数据
  • 🔒 避免将目录权限设置为 777(完全开放)
  • 📂 确保有足够的权限执行修改操作(可能需要 sudo)

选择哪种脚本取决于你的操作系统和具体需求,Linux/Unix 环境下建议使用 Bash 脚本,Windows 环境使用 PowerShell 或 Python 脚本。

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