.-.
( ).
(___(__) messyRoom
/ / / cluttered floor, clean exits
_ /_/ /
__| |__ / scan -> filter -> classify -> preview -> apply -> undo
/ _` / _ \ safe file organization for operator workspaces
| (_| | (_) |
\__,_|\___/
messyRoom is a dry-run-first file organizer for Linux workspaces. It scans a source directory, classifies files with configurable security/research-oriented rules, previews the target layout, and only moves or copies files after explicit confirmation.
It is designed for busy operator directories such as ~/Downloads, recon folders, bug-bounty workspaces, notes dumps, screenshots, payload collections, archives, configs, and reports.
- Dry-run is the default. No files move unless
--applyis passed. - Hidden files and hidden directories are skipped unless
--include-hiddenis passed. - Sensitive names such as private keys, credentials, tokens, and passwords are skipped by default.
- Protected system paths such as
/,/etc,/usr,/var,/opt, and/rootare refused. - Existing destination files are never overwritten; collisions get a numeric suffix.
- Applied move/copy transactions are logged and can be undone.
From a clone:
git clone https://github.com/usercopy-fault/messyRoom.git
cd messyRoom
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .The editable install provides the messyroom command.
If you do not want to install it yet, run directly from the repository:
PYTHONPATH=src python -m messyroom --help
# or:
python src/messyroom/organizer.py --helpPreview organization for ~/Downloads:
messyroom --source ~/DownloadsPreview with skipped files visible:
messyroom --source ~/Downloads --show-skippedCreate the category folders under the configured target root, defaulting to ~/organized:
messyroom --initMove files after reviewing the preview:
messyroom --source ~/Downloads --target ~/organized --applyCopy instead of move:
messyroom --source ~/Downloads --target ~/organized --apply --copyUndo the most recent applied transaction:
messyroom --undoShow undo history or recent operation logs:
messyroom --history
messyroom --log --log-tail 50messyroom -s ~/Downloads/recon-drop -t ~/ops/sorted-recon --show-skipped
messyroom -s ~/Downloads/recon-drop -t ~/ops/sorted-recon --applymessyroom -s ~/Downloads -t ~/organized --only-category Screenshots
messyroom -s ~/Downloads -t ~/organized --exclude-category ArchivesInclude hidden or sensitive files deliberately
messyroom -s ~/Downloads --include-hidden
messyroom -s ~/Downloads --apply --include-sensitiveUse --include-sensitive carefully. The safer pattern is to inspect the preview first, then apply only after you are certain the target directory is appropriate.
Default categories include:
Burp-Exports,Caido-Exports,Targets,Recon,Payloads,Reports,WordlistsMobile-APKs,Screenshots,PCAPs,Keys,JS-FilesNotes,Code,Web,Configs,Logs,Data,DocumentsImages,Videos,Music,Archives,Other
Classification uses this order:
- filename keyword rules
- content regex rules from the first few KB of text-like files
- extension rules
- fallback to
Other
Bundled JSON configs live in src/messyroom/configs/:
categories.jsoncontrols keyword, content, extension, and priority rules.ignore.jsoncontrols ignored folders, ignored filenames, protected paths, and sensitive patterns.settings.jsoncontrols defaults such as recursion, scan depth, target root, and collision behavior.
Use a custom config directory containing any or all of those files:
mkdir -p ~/.config/messyroom
cp src/messyroom/configs/*.json ~/.config/messyroom/
$EDITOR ~/.config/messyroom/categories.json
messyroom -s ~/Downloads --config-dir ~/.config/messyroommessyRoom/
├── README.md
├── pyproject.toml
├── src/messyroom/
│ ├── __init__.py
│ ├── __main__.py
│ ├── organizer.py
│ ├── scanner.py
│ ├── rules.py
│ ├── mover.py
│ ├── reporter.py
│ ├── utils.py
│ └── configs/
├── tests/
└── docs/legacy/
python -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
python -m pytest
python -m compileall src testsRun a direct smoke test without touching real files:
tmp=$(mktemp -d)
printf 'Nmap scan report for example.com\n80/tcp open http\n' > "$tmp/recon.txt"
messyroom -s "$tmp" -t "$tmp/out" --show-skipped
rm -rf "$tmp"The original recovered single-file organizer is kept under scripts/legacy/ for reference. The maintained implementation is the package under src/messyroom/.
Kansas