Automatically organize and clean up downloads folder by categorizing files, removing duplicates, and optimizing storage space
Automatically organize and clean up your downloads folder with intelligent file categorization, duplicate detection, and storage optimization.
Transform a chaotic downloads folder into a well-organized, searchable archive by:
Get current state:
cd ~/Downloads
python scripts/organizer.py --analyze
Output:
š Downloads Folder Analysis
Total Size: 45.2 GB
Total Files: 1,234
Total Folders: 87
Largest Files:
1. alma-0.0.204-mac-arm64.dmg (248 MB)
2. Antigravity.Tools_3.3.32_aarch64.dmg (14 MB)
File Distribution:
- Installers: 3.6 GB (8%)
- Documents: 662 MB (1.5%)
- Images: 1.2 GB (2.7%)
- Videos: 5.8 GB (12.8%)
Auto-categorize scattered files:
python scripts/organizer.py --organize --dry-run
Preview:
Would move:
- *.dmg ā Installers/ (15 files)
- *.png ā Images/ (42 files)
- *.pdf ā Documents/PDF/ (23 files)
- *.mp4 ā Videos/ (8 files)
- *.json ā Documents/ (12 files)
Execute:
python scripts/organizer.py --organize
Remove old and duplicate files:
python scripts/organizer.py --cleanup
Actions:
Get detailed report:
python scripts/organizer.py --report --output report.md
Documents:
*.pdf, *.doc, *.docx, *.txt, *.md, *.rtf*.xls, *.xlsx, *.csv, *.json, *.yaml, *.ymlImages:
*.png, *.jpg, *.jpeg, *.gif, *.svg, *.webp, *.bmp*.tiff, *.icoVideos:
*.mp4, *.mov, *.avi, *.mkv, *.webm, *.flvAudio:
*.mp3, *.wav, *.m4a, *.flac, *.aac, *.oggInstallers:
*.dmg, *.pkg, *.app, *.zip, *.tar.gz, *.rar*.exe, *.msiArchives:
*.zip, *.tar.gz, *.tgz, *.rar, *.7zCode:
*.py, *.js, *.ts, *.java, *.cpp, *.c, *.h*.html, *.css, *.scss, *.jsonData:
*.csv, *.tsv, *.sql, *.db, *.sqlite~/Downloads/
āāā Archives/ # Compressed archives
āāā Audio/ # Audio files
āāā Backups/ # Backup files and folders
āāā Documents/ # Documents and text files
ā āāā PDF/
ā āāā Spreadsheets/
āāā Images/ # Image files
āāā Installers/ # Software installers
āāā Projects/ # Project-related folders
āāā Videos/ # Video files
āāā Software/ # Application bundles
āāā Others/ # Miscellaneous files
Installers:
*.dmg, *.pkg files older than 60 daysTemporary Files:
*.tmp, *.temp, *.cache files~/.Trash contentsEmpty Folders:
Find duplicates by:
Action:
python scripts/organizer.py --find-duplicates
Keep strategy:
Identify space hogs:
python scripts/organizer.py --large-files --min-size 100MB
Output:
š¦ Large Files (>100MB):
1. alma-0.0.204-mac-arm64.dmg - 248 MB
2. recording_2026-01-10_23-22-53.mp4 - 12 MB
3. generated-1768282547017.png - 25 MB
Set up cron job for automatic cleanup:
# Run cleanup every Sunday at 2 AM
0 2 * * 0 cd ~/Downloads && python scripts/organizer.py --cleanup
# Run organization daily at 9 AM
0 9 * * * cd ~/Downloads && python scripts/organizer.py --organize
Define custom rules in config/rules.yaml:
patterns:
- pattern: "*_recording_*.mp4"
destination: Videos/Recordings/
keep_days: 30
- pattern: "generated-*.png"
destination: Images/Generated/
keep_days: 7
- pattern: "Screenshot*.png"
destination: Images/Screenshots/
keep_days: 30
Create ~/.downloads-organizer/config.yaml:
downloads_dir: ~/Downloads
dry_run: false
verbose: true
cleanup:
installer_age_days: 60
temp_age_days: 7
duplicate_action: keep_newest
organization:
auto_categorize: true
respect_existing_folders: true
create_missing_folders: true
exclusions:
- "*.locked"
- ".*"
- "node_modules"
- ".git"
Add custom file types to categories:
custom_categories:
design:
extensions: [".sketch", ".fig", ".psd", ".ai"]
folder: "Design/"
data_science:
extensions: [".ipynb", ".r", ".mat", ".h5"]
folder: "DataScience/"
# Full cleanup cycle
python scripts/organizer.py \
--organize \
--cleanup \
--report \
--output ~/Downloads/weekly-report.md
# Just organize new files
python scripts/organizer.py --organize --new-only
# Aggressive cleanup with confirmation
python scripts/organizer.py \
--cleanup \
--installer-age 30 \
--remove-duplicates \
--remove-empty-folders \
--confirm
# Move project files to Projects/ folder
python scripts/organizer.py \
--move-projects \
--project-pattern "*-project*" \
--destination Projects/
Link organized files to Obsidian vault:
python scripts/organizer.py --link-obsidian --vault ~/Documents/ObsidianVault
Creates:
[[Downloads/Images/file.png]] links in ObsidianSync organized folders to cloud:
python scripts/organizer.py --sync-cloud \
--provider icloud \
--folders Documents,Images \
--exclude-backups
Send cleanup notifications:
python scripts/organizer.py --cleanup --notify \
--method slack \
--channel #downloads
ā DO:
ā DON'T:
ā DO:
ā DON'T::
ā DO:
ā DON'T:
Problem: "File already exists" error
Solution:
python scripts/organizer.py --organize --handle-conflicts ask
Options:
ask - Prompt for each conflictskip - Skip conflicting filesoverwrite - Overwrite existing filesrename - Add timestamp to new filesProblem: "Permission denied" when moving files
Solution:
# Fix permissions
chmod -R u+rw ~/Downloads
# Run with sudo (last resort)
sudo python scripts/organizer.py --cleanup
Problem: Organization takes too long
Solution:
# Exclude large directories
python scripts/organizer.py --exclude "Projects/,Backups/"
# Use parallel processing
python scripts/organizer.py --parallel --workers 4
# Skip hash comparison for duplicates
python scripts/organizer.py --find-duplicates --quick
scripts/organizer.pyreferences/configuration.mdreferences/file-types.yamlreferences/troubleshooting.mdAlways create backup before major cleanup:
python scripts/organizer.py --backup --dest ~/Downloads-backup
Roll back changes:
python scripts/organizer.py --undo --from ~/Downloads-backup
Confirm destructive actions:
python scripts/organizer.py --cleanup --confirm
Detailed logging for audit:
python scripts/organizer.py --organize --log-level debug --log-file organizer.log
Last Updated: 2026-01-15 Version: 1.0.0