本文目录导读:

Linux 文件权限批量设置脚本
Bash 脚本示例
#!/bin/bash
# 批量设置文件权限脚本
# 使用方法: ./batch_chmod.sh
# 配置区域
TARGET_DIR="/path/to/your/directory"
FILE_PERMISSION="644" # 文件权限
DIR_PERMISSION="755" # 目录权限
OWNER="user:group" # 所有者:组
# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 $TARGET_DIR 不存在"
exit 1
fi
echo "开始批量设置权限..."
# 设置目录权限
find "$TARGET_DIR" -type d -exec chmod $DIR_PERMISSION {} \;
# 设置文件权限
find "$TARGET_DIR" -type f -exec chmod $FILE_PERMISSION {} \;
# 设置所有者和组
if [ -n "$OWNER" ]; then
chown -R $OWNER "$TARGET_DIR"
fi
echo "权限设置完成!"
# 显示权限变更统计
echo "文件数量: $(find "$TARGET_DIR" -type f | wc -l)"
echo "目录数量: $(find "$TARGET_DIR" -type d | wc -l)"
更灵活的权限设置脚本
#!/bin/bash
# 高级批量权限设置工具
# 显示帮助
show_help() {
cat << EOF
用法: $0 [选项]
选项:
-d <directory> 指定目标目录
-f <perm> 文件权限 (默认: 644)
-dir <perm> 目录权限 (默认: 755)
-o <owner> 所有者 (如: user:group)
-e <extensions> 特定扩展名 (逗号分隔,如: .txt,.sh)
-v 显示详细信息
-h 显示帮助
示例:
$0 -d /var/www -f 664 -dir 775
$0 -d /data -e .log,.txt -f 600
$0 -d /project -o www-data:www-data
EOF
}
# 初始化变量
TARGET_DIR=""
FILE_PERM="644"
DIR_PERM="755"
OWNER=""
EXTENSIONS=""
VERBOSE=0
# 解析参数
while [ $# -gt 0 ]; do
case $1 in
-d) TARGET_DIR="$2"; shift 2 ;;
-f) FILE_PERM="$2"; shift 2 ;;
-dir) DIR_PERM="$2"; shift 2 ;;
-o) OWNER="$2"; shift 2 ;;
-e) EXTENSIONS="$2"; shift 2 ;;
-v) VERBOSE=1; shift ;;
-h) show_help; exit 0 ;;
*) echo "未知参数: $1"; show_help; exit 1 ;;
esac
done
# 验证必要参数
if [ -z "$TARGET_DIR" ]; then
echo "错误: 必须指定目标目录"
show_help
exit 1
fi
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 $TARGET_DIR 不存在"
exit 1
fi
# 日志函数
log() {
if [ $VERBOSE -eq 1 ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
fi
}
echo "开始批量设置权限..."
log "目标目录: $TARGET_DIR"
log "文件权限: $FILE_PERM"
log "目录权限: $DIR_PERM"
# 统计变量
FILE_COUNT=0
DIR_COUNT=0
# 处理文件权限
if [ -n "$EXTENSIONS" ]; then
# 只处理指定扩展名的文件
IFS=',' read -ra EXT_ARRAY <<< "$EXTENSIONS"
for ext in "${EXT_ARRAY[@]}"; do
find "$TARGET_DIR" -type f -name "*$ext" | while read file; do
chmod "$FILE_PERM" "$file"
log "已设置文件权限: $file"
((FILE_COUNT++))
done
done
else
# 处理所有文件
while IFS= read -r file; do
chmod "$FILE_PERM" "$file"
log "已设置文件权限: $file"
((FILE_COUNT++))
done < <(find "$TARGET_DIR" -type f)
fi
# 处理目录权限
while IFS= read -r dir; do
chmod "$DIR_PERM" "$dir"
log "已设置目录权限: $dir"
((DIR_COUNT++))
done < <(find "$TARGET_DIR" -type d)
# 设置所有者
if [ -n "$OWNER" ]; then
chown -R "$OWNER" "$TARGET_DIR"
log "已设置所有者: $OWNER"
fi
echo "完成! 共设置 $FILE_COUNT 个文件, $DIR_COUNT 个目录"
Python 版本脚本
#!/usr/bin/env python3
"""
批量权限设置工具
用法: python3 batch_chmod.py /path/to/directory 755 644
"""
import os
import sys
import argparse
from pathlib import Path
def set_permissions(directory, dir_perm=0o755, file_perm=0o644, owner=None):
"""递归设置文件和目录权限"""
stats = {'files': 0, 'dirs': 0}
for root, dirs, files in os.walk(directory):
# 设置目录权限
for dir_name in dirs:
dir_path = Path(root) / dir_name
os.chmod(dir_path, dir_perm)
stats['dirs'] += 1
print(f"设置目录权限: {dir_path}")
# 设置文件权限
for file_name in files:
file_path = Path(root) / file_name
os.chmod(file_path, file_perm)
stats['files'] += 1
print(f"设置文件权限: {file_path}")
# 设置所有者
if owner:
try:
if ':' in owner:
user, group = owner.split(':')
os.chown(root, user, group)
else:
os.chown(root, owner, -1)
except PermissionError:
print(f"警告: 无法设置 {root} 的所有者")
return stats
def main():
parser = argparse.ArgumentParser(description='批量设置文件权限')
parser.add_argument('directory', help='目标目录')
parser.add_argument('-d', '--dir-perm', type=lambda x: int(x, 8),
default=0o755, help='目录权限 (八进制)')
parser.add_argument('-f', '--file-perm', type=lambda x: int(x, 8),
default=0o644, help='文件权限 (八进制)')
parser.add_argument('-o', '--owner', help='所有者 (user:group)')
parser.add_argument('-v', '--verbose', action='store_true', help='详细输出')
args = parser.parse_args()
if not os.path.exists(args.directory):
print(f"错误: 目录 {args.directory} 不存在")
sys.exit(1)
try:
stats = set_permissions(
args.directory,
args.dir_perm,
args.file_perm,
args.owner
)
print(f"\n完成! 共设置 {stats['files']} 个文件, {stats['dirs']} 个目录")
except PermissionError:
print("错误: 权限不足,请以root身份运行")
sys.exit(1)
except Exception as e:
print(f"错误: {str(e)}")
sys.exit(1)
if __name__ == "__main__":
main()
使用示例
基本用法
# 基本使用 chmod +x batch_chmod.sh ./batch_chmod.sh # 带参数使用 python3 batch_chmod.py /var/www -d 755 -f 644 # Web服务器目录 python3 batch_chmod.py /var/www/html -d 755 -f 644 -o www-data:www-data # 日志文件特殊权限 python3 batch_chmod.py /var/log/myapp -d 750 -f 640 -o admin:logs
注意事项
- 测试环境先行:在正式环境使用前先在测试目录验证
- 备份重要数据:执行前备份重要文件
- 权限最简化:遵循最小权限原则
- 日志记录:建议添加操作日志
- 错误处理:添加完善的错误处理机制
这些脚本可以根据具体需求进行修改和扩展,选择哪种方案取决于你的具体使用场景和熟练程度。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播