-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdirs-status.sh
More file actions
executable file
·98 lines (79 loc) · 3.07 KB
/
dirs-status.sh
File metadata and controls
executable file
·98 lines (79 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/bash
# dirs-status.sh - Report on backup source directories
# Source the shared modules
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/config.sh"
source "$SCRIPT_DIR/utils.sh"
# Header
echo -e "${CYAN}===== WebDev Backup Tool - Source Directories Report =====${NC}"
echo "Generated: $(date)"
echo
# Check all directories
echo -e "${YELLOW}Source Directories:${NC}"
echo
if [ ${#DEFAULT_SOURCE_DIRS[@]} -eq 0 ]; then
echo -e "${RED}No source directories configured!${NC}"
exit 1
fi
# Total counts
TOTAL_PROJECTS=0
TOTAL_SIZE=0
VALID_DIRS=0
INVALID_DIRS=0
# Track project counts per directory (Bash 3.2 compatible; avoid associative arrays)
PROJECT_DIR_NAMES=()
PROJECT_DIR_COUNTS=()
# Process each directory
for ((i=0; i<${#DEFAULT_SOURCE_DIRS[@]}; i++)); do
DIR="${DEFAULT_SOURCE_DIRS[$i]}"
DIR_NAME=$(basename "$DIR")
echo -e "${GREEN}[$i] $DIR${NC}"
# Check if directory exists and is readable
if [ -d "$DIR" ] && [ -r "$DIR" ]; then
# Find all projects (subdirs) - Bash 3.2 compatible
PROJECTS=()
while IFS= read -r project_path; do
[ -n "$project_path" ] && PROJECTS+=("$project_path")
done < <(find "$DIR" -maxdepth 1 -mindepth 1 -type d -not -path "*/\.*" | sort)
PROJECT_COUNT=${#PROJECTS[@]}
PROJECT_DIR_NAMES+=("$DIR_NAME")
PROJECT_DIR_COUNTS+=("$PROJECT_COUNT")
TOTAL_PROJECTS=$((TOTAL_PROJECTS + PROJECT_COUNT))
VALID_DIRS=$((VALID_DIRS + 1))
echo " Status: ${GREEN}✓ Valid${NC}"
echo " Projects found: $PROJECT_COUNT"
# If projects found, calculate total size (excluding node_modules)
if [ $PROJECT_COUNT -gt 0 ]; then
DIR_SIZE=0
echo " Projects:"
for PROJECT in "${PROJECTS[@]}"; do
PROJECT_NAME=$(basename "$PROJECT")
PROJECT_SIZE=$(get_directory_size "$PROJECT" "node_modules")
DIR_SIZE=$((DIR_SIZE + PROJECT_SIZE))
TOTAL_SIZE=$((TOTAL_SIZE + PROJECT_SIZE))
FORMATTED_SIZE=$(format_size "$PROJECT_SIZE")
echo " - $PROJECT_NAME ($FORMATTED_SIZE)"
done
FORMATTED_DIR_SIZE=$(format_size "$DIR_SIZE")
echo " Total directory size (excluding node_modules): $FORMATTED_DIR_SIZE"
else
echo " ${YELLOW}No projects found in this directory${NC}"
fi
else
INVALID_DIRS=$((INVALID_DIRS + 1))
echo " Status: ${RED}✗ Invalid - Directory does not exist or is not readable${NC}"
fi
echo
done
# Summary
echo -e "${CYAN}===== Summary =====${NC}"
echo "Valid directories: $VALID_DIRS"
echo "Invalid directories: $INVALID_DIRS"
echo "Total projects found: $TOTAL_PROJECTS"
echo "Total size (excluding node_modules): $(format_size "$TOTAL_SIZE")"
echo
echo -e "${CYAN}Projects by directory:${NC}"
for ((i=0; i<${#PROJECT_DIR_NAMES[@]}; i++)); do
echo " ${PROJECT_DIR_NAMES[$i]}: ${PROJECT_DIR_COUNTS[$i]} projects"
done
exit 0