Initial release: Disk space reporting tool for Ubuntu/Linux systems
This commit is contained in:
		
							parent
							
								
									04b184dbae
								
							
						
					
					
						commit
						585f477db1
					
				| 
						 | 
					@ -0,0 +1,106 @@
 | 
				
			||||||
 | 
					# Disk Space Report Script
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A comprehensive disk space analysis tool for Ubuntu/Linux systems that helps identify storage usage patterns and suggests cleanup opportunities.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- **APT Cache Analysis**: Estimates size of package cache that can be cleared
 | 
				
			||||||
 | 
					- **Package Management**: Identifies old installed packages taking up space
 | 
				
			||||||
 | 
					- **Journal Log Analysis**: Checks system journal logs for cleanup opportunities
 | 
				
			||||||
 | 
					- **Temporary Files Check**: Analyzes temporary directories for cleanup
 | 
				
			||||||
 | 
					- **Docker Volume Analysis**: Identifies unused Docker volumes consuming space
 | 
				
			||||||
 | 
					- **Docker Log Management**: Finds large Docker log files and suggests rotation
 | 
				
			||||||
 | 
					- **Large Directory Discovery**: Lists directories consuming significant space
 | 
				
			||||||
 | 
					- **Automatic Report Upload**: Uploads results to Hastebin for easy sharing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Requirements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Ubuntu/Linux system
 | 
				
			||||||
 | 
					- `sudo` privileges for comprehensive analysis
 | 
				
			||||||
 | 
					- `docker` (optional, for Docker-related analysis)
 | 
				
			||||||
 | 
					- `jq` for JSON parsing (for Hastebin upload)
 | 
				
			||||||
 | 
					- `curl` for report uploading
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Installation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					# Clone the repository
 | 
				
			||||||
 | 
					git clone https://github.com/yourusername/disk-space-report.git
 | 
				
			||||||
 | 
					cd disk-space-report
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Make the script executable
 | 
				
			||||||
 | 
					chmod +x disk-check.sh
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Usage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					./disk-check.sh
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The script will:
 | 
				
			||||||
 | 
					1. Analyze various system components for space usage
 | 
				
			||||||
 | 
					2. Generate a comprehensive report
 | 
				
			||||||
 | 
					3. Save the report to `/tmp/disk_space_report.log`
 | 
				
			||||||
 | 
					4. Upload the report to Hastebin and provide a shareable URL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## What It Analyzes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### System Components
 | 
				
			||||||
 | 
					- **APT Cache** (`/var/cache/apt`): Downloaded package files
 | 
				
			||||||
 | 
					- **Package Lists** (`/var/lib/apt/lists`): Package index files
 | 
				
			||||||
 | 
					- **Journal Logs**: System logging data
 | 
				
			||||||
 | 
					- **Temporary Files** (`/tmp`, `/var/tmp`): Temporary system files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Docker Components (if Docker is installed)
 | 
				
			||||||
 | 
					- **Unused Volumes**: Dangling Docker volumes
 | 
				
			||||||
 | 
					- **Large Log Files**: Docker container logs over 1GB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Directory Analysis
 | 
				
			||||||
 | 
					- **Large Directories**: Directories consuming more than 5GB and 10GB
 | 
				
			||||||
 | 
					- **Home Directory Analysis**: Large directories in user home folders
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Sample Output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The script provides estimates like:
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Estimating the size of the apt cache:
 | 
				
			||||||
 | 
					1.2G    /var/cache/apt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Estimating the size of journal logs:
 | 
				
			||||||
 | 
					Archived and active journals take up 2.1G in the file system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Directories in / consuming more than 5GB:
 | 
				
			||||||
 | 
					7.2G    /var/lib/docker
 | 
				
			||||||
 | 
					12G     /usr/share
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Cleanup Suggestions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Based on the analysis, you can:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. **Clear APT cache**: `sudo apt clean`
 | 
				
			||||||
 | 
					2. **Remove old packages**: `sudo apt autoremove`
 | 
				
			||||||
 | 
					3. **Clean journal logs**: `sudo journalctl --vacuum-time=30d`
 | 
				
			||||||
 | 
					4. **Clear temporary files**: `sudo rm -rf /tmp/*` (use with caution)
 | 
				
			||||||
 | 
					5. **Remove unused Docker volumes**: `docker volume prune`
 | 
				
			||||||
 | 
					6. **Truncate Docker logs**: Use the provided command in the script output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## macOS Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For macOS users, there's also a `disk-check-macos.sh` version that provides similar functionality adapted for macOS systems.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Safety Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- This script only **analyzes** disk usage - it doesn't delete anything
 | 
				
			||||||
 | 
					- Always review suggested cleanup commands before running them
 | 
				
			||||||
 | 
					- Some cleanup operations cannot be undone
 | 
				
			||||||
 | 
					- The script requires `sudo` for comprehensive system analysis
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Contributing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This project is licensed under the MIT License.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,108 @@
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					set -x # debug mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create a temporary file to store the report
 | 
				
			||||||
 | 
					TEMP_FILE=$(mktemp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Write report header
 | 
				
			||||||
 | 
					echo "macOS Fast Disk Usage Analysis" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Generated on $(date)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Finding where your 256GB is actually going..." >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "=============================================" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Overall disk usage
 | 
				
			||||||
 | 
					echo "OVERALL DISK USAGE:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					df -h / >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Quick size check of major directories (no sudo needed)
 | 
				
			||||||
 | 
					echo "MAJOR DIRECTORY SIZES (accessible without sudo):" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Applications: $(du -sh /Applications 2>/dev/null | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Users: $(du -sh /Users 2>/dev/null | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Your Home: $(du -sh "$HOME" 2>/dev/null | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User directories breakdown
 | 
				
			||||||
 | 
					echo "YOUR HOME DIRECTORY BREAKDOWN:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					du -sh "$HOME"/* 2>/dev/null | sort -hr >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User Library breakdown (often huge)
 | 
				
			||||||
 | 
					echo "YOUR LIBRARY DIRECTORY - often contains huge files:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					du -sh "$HOME/Library"/* 2>/dev/null | sort -hr | head -n 15 >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Application sizes
 | 
				
			||||||
 | 
					echo "INSTALLED APPLICATIONS - largest first:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					du -sh /Applications/* 2>/dev/null | sort -hr | head -n 15 >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Time Machine local snapshots (major space hog)
 | 
				
			||||||
 | 
					echo "TIME MACHINE LOCAL SNAPSHOTS - can be huge:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					snapshots=$(tmutil listlocalsnapshots / 2>/dev/null | wc -l | tr -d ' ')
 | 
				
			||||||
 | 
					echo "Number of local snapshots: $snapshots" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					if [ "$snapshots" -gt 0 ]; then
 | 
				
			||||||
 | 
					  echo "Recent snapshots:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					  tmutil listlocalsnapshots / 2>/dev/null | head -n 5 >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Large files in user area
 | 
				
			||||||
 | 
					echo "LARGEST FILES IN YOUR HOME - over 500MB:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					find "$HOME" -type f -size +500M 2>/dev/null | head -n 10 | xargs ls -lh 2>/dev/null | awk '{print $5 "\t" $9}' >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Common space hogs
 | 
				
			||||||
 | 
					echo "COMMON SPACE HOGS:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Downloads folder: $(du -sh "$HOME/Downloads" 2>/dev/null | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Desktop: $(du -sh "$HOME/Desktop" 2>/dev/null | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Documents: $(du -sh "$HOME/Documents" 2>/dev/null | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Movies: $(du -sh "$HOME/Movies" 2>/dev/null | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Pictures: $(du -sh "$HOME/Pictures" 2>/dev/null | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "Music: $(du -sh "$HOME/Music" 2>/dev/null | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Development files that can be safely removed
 | 
				
			||||||
 | 
					echo "DEVELOPMENT FILES - safe to remove, will rebuild:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "node_modules directories:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					find "$HOME" -name "node_modules" -type d 2>/dev/null | xargs du -sh 2>/dev/null | sort -hr | head -n 10 >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Xcode files
 | 
				
			||||||
 | 
					echo "XCODE FILES - safe to delete, will regenerate:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					if [ -d "$HOME/Library/Developer/Xcode/DerivedData" ]; then
 | 
				
			||||||
 | 
					  echo "Xcode DerivedData: $(du -sh "$HOME/Library/Developer/Xcode/DerivedData" | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if [ -d "$HOME/Library/Developer/CoreSimulator" ]; then
 | 
				
			||||||
 | 
					  echo "iOS Simulators: $(du -sh "$HOME/Library/Developer/CoreSimulator" | cut -f1)" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Caches
 | 
				
			||||||
 | 
					echo "CACHE DIRECTORIES - safe to clear:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					du -sh "$HOME/Library/Caches"/* 2>/dev/null | sort -hr | head -n 10 >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# System info
 | 
				
			||||||
 | 
					echo "SYSTEM SPACE ESTIMATE:" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo "To get exact system usage, run: sudo du -sh /System /Library /private 2>/dev/null" >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					echo >> "$TEMP_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Post the report to Hastebin
 | 
				
			||||||
 | 
					RESPONSE=$(curl -s -X POST -d "$(cat "$TEMP_FILE")" "https://haste.nixc.us/documents")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Extract the key from the Hastebin response
 | 
				
			||||||
 | 
					KEY=$(echo "$RESPONSE" | grep -o '"key":"[^"]*"' | cut -d'"' -f4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -n "$KEY" ]; then
 | 
				
			||||||
 | 
					  echo "Fast disk usage report uploaded to Hastebin!"
 | 
				
			||||||
 | 
					  echo "See where your 256GB is going: https://haste.nixc.us/$KEY"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  echo "Error: Failed to upload report to Hastebin."
 | 
				
			||||||
 | 
					  echo "Local disk usage report:"
 | 
				
			||||||
 | 
					  cat "$TEMP_FILE"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Clean up the temporary file
 | 
				
			||||||
 | 
					rm -f "$TEMP_FILE" 
 | 
				
			||||||
| 
						 | 
					@ -1,68 +1,109 @@
 | 
				
			||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LOG_FILE="/tmp/disk_space_report.log"
 | 
				
			||||||
 | 
					HASTE_URL="https://haste.nixc.us/documents"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Clear the log file if it exists
 | 
				
			||||||
 | 
					> "$LOG_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Starting disk space report... This may take a few minutes." | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Function to estimate the size of the apt cache
 | 
					# Function to estimate the size of the apt cache
 | 
				
			||||||
estimate_apt_cache_size() {
 | 
					estimate_apt_cache_size() {
 | 
				
			||||||
    echo "Estimating the size of the apt cache:"
 | 
					    echo "Estimating the size of the apt cache:" | tee -a "$LOG_FILE"
 | 
				
			||||||
    sudo du -sh /var/cache/apt
 | 
					    sudo du -sh /var/cache/apt | tee -a "$LOG_FILE"
 | 
				
			||||||
    echo
 | 
					    echo | tee -a "$LOG_FILE"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Function to estimate the size of old installed packages
 | 
					# Function to estimate the size of old installed packages
 | 
				
			||||||
estimate_old_packages_size() {
 | 
					estimate_old_packages_size() {
 | 
				
			||||||
    echo "Estimating the size of old installed packages:"
 | 
					    echo "Estimating the size of old installed packages:" | tee -a "$LOG_FILE"
 | 
				
			||||||
    sudo du -sh /var/lib/apt/lists /var/lib/apt/lists/partial
 | 
					    sudo du -sh /var/lib/apt/lists /var/lib/apt/lists/partial | tee -a "$LOG_FILE"
 | 
				
			||||||
    echo
 | 
					    echo | tee -a "$LOG_FILE"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Function to estimate the size of journal logs
 | 
					# Function to estimate the size of journal logs
 | 
				
			||||||
estimate_journal_size() {
 | 
					estimate_journal_size() {
 | 
				
			||||||
    echo "Estimating the size of journal logs:"
 | 
					    echo "Estimating the size of journal logs:" | tee -a "$LOG_FILE"
 | 
				
			||||||
    sudo journalctl --disk-usage
 | 
					    sudo journalctl --disk-usage | tee -a "$LOG_FILE"
 | 
				
			||||||
    echo
 | 
					    echo | tee -a "$LOG_FILE"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Function to estimate the size of temporary files
 | 
					# Function to estimate the size of temporary files
 | 
				
			||||||
estimate_tmp_size() {
 | 
					estimate_tmp_size() {
 | 
				
			||||||
    echo "Estimating the size of temporary files:"
 | 
					    echo "Estimating the size of temporary files:" | tee -a "$LOG_FILE"
 | 
				
			||||||
    sudo du -sh /tmp /var/tmp
 | 
					    sudo du -sh /tmp /var/tmp | tee -a "$LOG_FILE"
 | 
				
			||||||
    echo
 | 
					    echo | tee -a "$LOG_FILE"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Function to estimate the size of unused Docker volumes
 | 
					# Function to estimate the size of unused Docker volumes
 | 
				
			||||||
estimate_docker_volumes_size() {
 | 
					estimate_docker_volumes_size() {
 | 
				
			||||||
    echo "Estimating the size of unused Docker volumes:"
 | 
					    echo "Estimating the size of unused Docker volumes:" | tee -a "$LOG_FILE"
 | 
				
			||||||
    docker volume ls -qf dangling=true | xargs -I {} docker inspect {} -f '{{ .Name }}: {{ .Size }}' | awk '{ sum += $3 } END { print sum/1024/1024 " MB" }'
 | 
					    docker volume ls -qf dangling=true | xargs -I {} docker volume inspect --format '{{ .Mountpoint }}' {} | xargs -I {} sudo du -sh {} | awk '{ sum += $1 } END { print sum "B" }' | tee -a "$LOG_FILE"
 | 
				
			||||||
    echo
 | 
					    echo | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Function to check and suggest logrotate for large Docker logs
 | 
				
			||||||
 | 
					check_docker_logs() {
 | 
				
			||||||
 | 
					    echo "Checking Docker logs for large files..." | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					    large_logs=$(docker ps -q --filter "status=exited" | xargs -I {} docker inspect --format '{{.LogPath}}' {} | xargs -I {} sudo find {} -type f -size +1G)
 | 
				
			||||||
 | 
					    if [ -n "$large_logs" ]; then
 | 
				
			||||||
 | 
					        echo "The following Docker logs are larger than 1GB:" | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					        echo "$large_logs" | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					        echo | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					        echo "Consider setting up logrotate to manage Docker logs." | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					        echo "To truncate all Docker logs, run:" | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					        echo 'sudo find /var/lib/docker/containers/ -type f -name "*.log" -exec truncate -s 0 {} \;' | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					        echo | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        echo "No large Docker logs found." | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					        echo | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Function to list directories consuming more than a specified size
 | 
					# Function to list directories consuming more than a specified size
 | 
				
			||||||
list_large_directories() {
 | 
					list_large_directories() {
 | 
				
			||||||
    local directory=$1
 | 
					    local directory=$1
 | 
				
			||||||
    local size_limit=$2
 | 
					    local size_limit=$2
 | 
				
			||||||
    echo "Directories in $directory consuming more than $size_limit:"
 | 
					    echo "Directories in $directory consuming more than ${size_limit}GB:" | tee -a "$LOG_FILE"
 | 
				
			||||||
    sudo du -ah $directory 2>/dev/null | awk -v limit=$size_limit '{
 | 
					    sudo du -ahx "$directory" 2>/dev/null | awk -v limit="$size_limit" '{
 | 
				
			||||||
        size=$1; unit=substr(size, length(size));
 | 
					        size=$1; unit=substr(size, length(size));
 | 
				
			||||||
        size_val=substr(size, 1, length(size)-1);
 | 
					        size_val=substr(size, 1, length(size)-1);
 | 
				
			||||||
        if ((unit=="G" && size_val+0 > limit) || (unit=="T" && size_val*1024 > limit)) {
 | 
					        if ((unit=="G" && size_val+0 > limit) || (unit=="T" && size_val*1024 > limit)) {
 | 
				
			||||||
            print
 | 
					            print
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }'
 | 
					    }' | tee -a "$LOG_FILE"
 | 
				
			||||||
    echo
 | 
					    echo | tee -a "$LOG_FILE"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Estimate storage savings
 | 
					# Estimate storage savings
 | 
				
			||||||
echo "Estimating potential storage savings..."
 | 
					echo "Estimating potential storage savings..." | tee -a "$LOG_FILE"
 | 
				
			||||||
estimate_apt_cache_size
 | 
					estimate_apt_cache_size
 | 
				
			||||||
estimate_old_packages_size
 | 
					estimate_old_packages_size
 | 
				
			||||||
estimate_journal_size
 | 
					estimate_journal_size
 | 
				
			||||||
estimate_tmp_size
 | 
					estimate_tmp_size
 | 
				
			||||||
estimate_docker_volumes_size
 | 
					estimate_docker_volumes_size
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Check Docker logs
 | 
				
			||||||
 | 
					check_docker_logs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# List large directories
 | 
					# List large directories
 | 
				
			||||||
echo "Listing directories consuming more than 5GB and 10GB:"
 | 
					echo "Listing directories consuming more than 5GB and 10GB:" | tee -a "$LOG_FILE"
 | 
				
			||||||
list_large_directories / 5
 | 
					list_large_directories / 5
 | 
				
			||||||
list_large_directories /home 5
 | 
					list_large_directories /home 5
 | 
				
			||||||
list_large_directories / 10
 | 
					list_large_directories / 10
 | 
				
			||||||
list_large_directories /home 10
 | 
					list_large_directories /home 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Storage savings estimation and large directory listing completed."
 | 
					echo "Storage savings estimation and large directory listing completed." | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Upload the log file to Hastebin
 | 
				
			||||||
 | 
					echo "Uploading report to Hastebin..." | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					response=$(curl -s -X POST -T "$LOG_FILE" "$HASTE_URL")
 | 
				
			||||||
 | 
					if [[ $response == *"key"* ]]; then
 | 
				
			||||||
 | 
					    key=$(echo "$response" | jq -r '.key')
 | 
				
			||||||
 | 
					    # Remove /documents/ and use the key to form the correct URL
 | 
				
			||||||
 | 
					    report_url="https://haste.nixc.us/$key"
 | 
				
			||||||
 | 
					    echo "Report available at: $report_url" | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    echo "Failed to upload report to Hastebin. Response: $response" | tee -a "$LOG_FILE"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue