批量修改文件权限的脚本

wen 实用脚本 1

本文目录导读:

批量修改文件权限的脚本

  1. 基础批量修改脚本
  2. 区分文件和目录的脚本
  3. 带交互确认的脚本
  4. 特定文件类型修改脚本
  5. 使用方法
  6. 注意事项

基础批量修改脚本

#!/bin/bash
# 批量修改文件权限脚本
# 用法: ./chmod_batch.sh <权限> <目录>
# 检查参数
if [ $# -lt 2 ]; then
    echo "用法: $0 <权限> <目录>"
    echo "示例: $0 755 /path/to/directory"
    exit 1
fi
PERMISSION=$1
TARGET_DIR=$2
# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
    echo "错误: 目录 '$TARGET_DIR' 不存在"
    exit 1
fi
# 批量修改文件权限
echo "正在批量修改文件权限为 $PERMISSION ..."
find "$TARGET_DIR" -type f -exec chmod "$PERMISSION" {} \;
echo "完成!"
echo "已修改 $(find "$TARGET_DIR" -type f | wc -l) 个文件的权限"

区分文件和目录的脚本

#!/bin/bash
# 批量修改文件和目录权限
# 文件设为644,目录设为755
TARGET_DIR=${1:-.}
if [ ! -d "$TARGET_DIR" ]; then
    echo "错误: 目录 '$TARGET_DIR' 不存在"
    exit 1
fi
echo "正在处理目录: $TARGET_DIR"
echo "设置文件权限为 644,目录权限为 755"
# 修改文件权限
echo "修改文件权限..."
find "$TARGET_DIR" -type f -exec chmod 644 {} \;
# 修改目录权限
echo "修改目录权限..."
find "$TARGET_DIR" -type d -exec chmod 755 {} \;
# 统计结果
FILE_COUNT=$(find "$TARGET_DIR" -type f | wc -l)
DIR_COUNT=$(find "$TARGET_DIR" -type d | wc -l)
echo "完成!"
echo "已修改 $FILE_COUNT 个文件权限为 644"
echo "已修改 $DIR_COUNT 个目录权限为 755"

带交互确认的脚本

#!/bin/bash
# 交互式批量修改权限脚本
show_help() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -d, --directory  指定目录 (默认: 当前目录)"
    echo "  -f, --file-perm  文件权限 (默认: 644)"
    echo "  -D, --dir-perm   目录权限 (默认: 755)"
    echo "  -r, --recursive  递归修改 (默认启用)"
    echo "  -y, --yes        自动确认"
    echo "  -h, --help       显示帮助"
    exit 0
}
# 默认值
TARGET_DIR="."
FILE_PERM=644
DIR_PERM=755
RECURSIVE=true
AUTO_YES=false
# 解析参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -d|--directory)
            TARGET_DIR="$2"
            shift 2
            ;;
        -f|--file-perm)
            FILE_PERM="$2"
            shift 2
            ;;
        -D|--dir-perm)
            DIR_PERM="$2"
            shift 2
            ;;
        -r|--recursive)
            RECURSIVE=true
            shift
            ;;
        -y|--yes)
            AUTO_YES=true
            shift
            ;;
        -h|--help)
            show_help
            ;;
        *)
            echo "未知选项: $1"
            show_help
            ;;
    esac
done
# 检查目录
if [ ! -d "$TARGET_DIR" ]; then
    echo "错误: 目录 '$TARGET_DIR' 不存在"
    exit 1
fi
# 显示将要执行的操作
echo "准备执行以下操作:"
echo "目录: $TARGET_DIR"
echo "文件权限: $FILE_PERM"
echo "目录权限: $DIR_PERM"
echo "递归: $RECURSIVE"
# 确认
if [ "$AUTO_YES" = false ]; then
    read -p "是否继续? (y/n): " confirm
    if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
        echo "操作已取消"
        exit 0
    fi
fi
# 执行修改
echo "正在修改权限..."
if [ "$RECURSIVE" = true ]; then
    find "$TARGET_DIR" -type f -exec chmod "$FILE_PERM" {} \;
    find "$TARGET_DIR" -type d -exec chmod "$DIR_PERM" {} \;
else
    # 仅修改当前目录
    for item in "$TARGET_DIR"/*; do
        if [ -f "$item" ]; then
            chmod "$FILE_PERM" "$item"
        elif [ -d "$item" ]; then
            chmod "$DIR_PERM" "$item"
        fi
    done
fi
# 统计结果
FILE_COUNT=$(find "$TARGET_DIR" -type f | wc -l)
DIR_COUNT=$(find "$TARGET_DIR" -type d | wc -l)
echo "操作完成!"
echo "处理目录: $FILE_COUNT 个文件, $DIR_COUNT 个目录"

特定文件类型修改脚本

#!/bin/bash
# 修改特定文件类型的权限
#  只修改 .sh 和 .py 文件
TARGET_DIR=${1:-.}
FILE_EXTENSIONS=("sh" "py" "pl" "rb")  # 要处理的文件扩展名
PERMISSION=755  # 设置的可执行权限
echo "正在修改以下类型的文件权限为 $PERMISSION:"
for ext in "${FILE_EXTENSIONS[@]}"; do
    echo "  *.$ext"
done
for ext in "${FILE_EXTENSIONS[@]}"; do
    find "$TARGET_DIR" -type f -name "*.$ext" -exec chmod "$PERMISSION" {} \;
done
# 统计
total=0
for ext in "${FILE_EXTENSIONS[@]}"; do
    count=$(find "$TARGET_DIR" -type f -name "*.$ext" | wc -l)
    total=$((total + count))
    echo "已修改 $count 个 .$ext 文件"
done
echo "总计修改 $total 个文件"

使用方法

  1. 保存脚本到文件,chmod_batch.sh

  2. 添加执行权限:chmod +x chmod_batch.sh

  3. 运行脚本:

    # 基本使用
    ./chmod_batch.sh 755 /path/to/dir
    # 或使用交互式脚本
    ./chmod_batch_interactive.sh -d /path/to/dir -f 644 -D 755

注意事项

  • 运行前建议先备份重要数据
  • 使用 -v 参数可以查看详细执行过程
  • 对于大量文件,建议先在测试目录验证
  • 修改系统文件权限需谨慎

这些脚本提供了灵活的批量修改文件权限方案,可以根据实际需求选择或修改使用。

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