本文目录导读:

基础批量修改脚本
#!/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 个文件"
使用方法
-
保存脚本到文件,
chmod_batch.sh -
添加执行权限:
chmod +x chmod_batch.sh -
运行脚本:
# 基本使用 ./chmod_batch.sh 755 /path/to/dir # 或使用交互式脚本 ./chmod_batch_interactive.sh -d /path/to/dir -f 644 -D 755
注意事项
- 运行前建议先备份重要数据
- 使用
-v参数可以查看详细执行过程 - 对于大量文件,建议先在测试目录验证
- 修改系统文件权限需谨慎
这些脚本提供了灵活的批量修改文件权限方案,可以根据实际需求选择或修改使用。