255 lines
6.1 KiB
Bash
255 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 "$@"
|
|
|