LighthouseApp/nextcloud_file_manager.sh
speakeloudest 75d4c48e41
Some checks failed
Build Windows / build (push) Has been cancelled
feat: 源码提交
2025-10-19 23:30:54 -07:00

256 lines
6.1 KiB
Bash

#!/bin/bash
# Nextcloud 文件管理脚本
# 用于管理员查看和管理用户文件
set -e
# 配置变量
NEXTCLOUD_PATH="/var/www/nextcloud"
DATA_PATH="/var/www/nextcloud/data"
WEB_USER="www-data"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查 Nextcloud 安装
check_nextcloud() {
if [ ! -d "$NEXTCLOUD_PATH" ]; then
log_error "Nextcloud 未安装在 $NEXTCLOUD_PATH"
log_info "请修改脚本中的 NEXTCLOUD_PATH 变量"
exit 1
fi
log_success "找到 Nextcloud 安装"
}
# 显示所有用户
list_users() {
log_info "获取所有用户列表..."
echo ""
echo "=== 用户列表 ==="
sudo -u $WEB_USER php $NEXTCLOUD_PATH/occ user:list
echo ""
}
# 显示用户详细信息
show_user_info() {
local username=$1
if [ -z "$username" ]; then
log_error "请提供用户名"
return 1
fi
log_info "获取用户 $username 的详细信息..."
echo ""
echo "=== 用户 $username 信息 ==="
sudo -u $WEB_USER php $NEXTCLOUD_PATH/occ user:info "$username"
echo ""
}
# 显示用户文件统计
show_user_files() {
local username=$1
if [ -z "$username" ]; then
log_error "请提供用户名"
return 1
fi
local user_path="$DATA_PATH/$username/files"
if [ ! -d "$user_path" ]; then
log_error "用户 $username 的文件目录不存在"
return 1
fi
log_info "分析用户 $username 的文件..."
echo ""
echo "=== 用户 $username 文件统计 ==="
echo "文件总数: $(find "$user_path" -type f | wc -l)"
echo "目录总数: $(find "$user_path" -type d | wc -l)"
echo "总大小: $(du -sh "$user_path" | cut -f1)"
echo ""
echo "=== 按文件类型统计 ==="
find "$user_path" -type f -name ".*" -prune -o -type f -print | \
sed 's/.*\.//' | sort | uniq -c | sort -nr | head -10
echo ""
echo "=== 最大的 10 个文件 ==="
find "$user_path" -type f -exec ls -lh {} + | \
sort -k5 -hr | head -10 | awk '{print $5, $9}'
echo ""
}
# 搜索文件
search_files() {
local username=$1
local pattern=$2
if [ -z "$username" ] || [ -z "$pattern" ]; then
log_error "请提供用户名和搜索模式"
return 1
fi
local user_path="$DATA_PATH/$username/files"
if [ ! -d "$user_path" ]; then
log_error "用户 $username 的文件目录不存在"
return 1
fi
log_info "在用户 $username 的文件中搜索: $pattern"
echo ""
echo "=== 搜索结果 ==="
find "$user_path" -iname "*$pattern*" -type f | head -20
echo ""
}
# 显示存储使用情况
show_storage_usage() {
log_info "分析存储使用情况..."
echo ""
echo "=== 存储使用统计 ==="
# 总存储使用
total_size=$(du -sh "$DATA_PATH" | cut -f1)
echo "总存储使用: $total_size"
echo ""
# 按用户统计
echo "=== 各用户存储使用 ==="
for user_dir in "$DATA_PATH"/*; do
if [ -d "$user_dir" ] && [ "$(basename "$user_dir")" != "appdata_oc" ]; then
username=$(basename "$user_dir")
user_size=$(du -sh "$user_dir" | cut -f1)
file_count=$(find "$user_dir/files" -type f 2>/dev/null | wc -l)
echo "$username: $user_size ($file_count 个文件)"
fi
done
echo ""
}
# 清理用户文件
cleanup_user_files() {
local username=$1
local pattern=$2
if [ -z "$username" ]; then
log_error "请提供用户名"
return 1
fi
local user_path="$DATA_PATH/$username/files"
if [ ! -d "$user_path" ]; then
log_error "用户 $username 的文件目录不存在"
return 1
fi
log_warning "即将清理用户 $username 的文件"
if [ -n "$pattern" ]; then
log_warning "清理模式: $pattern"
fi
read -p "确认继续?(y/N): " confirm
if [[ $confirm != [yY] ]]; then
log_info "操作已取消"
return 0
fi
if [ -n "$pattern" ]; then
find "$user_path" -iname "*$pattern*" -type f -delete
log_success "已清理匹配 $pattern 的文件"
else
log_error "请提供清理模式"
return 1
fi
}
# 显示帮助
show_help() {
echo "Nextcloud 文件管理脚本"
echo ""
echo "用法: $0 [选项] [参数]"
echo ""
echo "选项:"
echo " list-users 显示所有用户"
echo " user-info <用户名> 显示用户详细信息"
echo " user-files <用户名> 显示用户文件统计"
echo " search <用户名> <模式> 搜索用户文件"
echo " storage 显示存储使用情况"
echo " cleanup <用户名> <模式> 清理用户文件(危险操作)"
echo " help 显示此帮助信息"
echo ""
echo "示例:"
echo " $0 list-users"
echo " $0 user-info john"
echo " $0 user-files john"
echo " $0 search john *.pdf"
echo " $0 storage"
echo " $0 cleanup john *.tmp"
}
# 主函数
main() {
case "$1" in
"list-users")
check_nextcloud
list_users
;;
"user-info")
check_nextcloud
show_user_info "$2"
;;
"user-files")
check_nextcloud
show_user_files "$2"
;;
"search")
check_nextcloud
search_files "$2" "$3"
;;
"storage")
check_nextcloud
show_storage_usage
;;
"cleanup")
check_nextcloud
cleanup_user_files "$2" "$3"
;;
"help"|"--help"|"-h")
show_help
;;
*)
log_error "未知选项: $1"
show_help
exit 1
;;
esac
}
# 运行主函数
main "$@"