S-Organizer
Automatic file organization with PyQt6 GUI.
Features
- Real-time monitoring - Watch folders and auto-organize files as they appear
- Rule-based sorting - Define rules to move, copy, rename, or delete files
- Flexible matching - Match by extension, name pattern, size, age, or content keywords
- Content-aware sorting - Search within PDF, DOCX, XLSX, CSV, TXT, and image EXIF data
- Undo support - Reverse any file operation from history (persisted across sessions)
- Duplicate detection - Find and handle duplicate files with CSV export
- Rule templates - Browse pre-built templates when creating new rules
- JSON rules - Easy to create, share, and version control rules
- Dark theme - Switch between light and dark themes
- System tray - Minimize to tray with notifications for file operations
- One-shot scan - Scan a folder once without continuous monitoring
- Log to file - Configurable file logging with rotation
- CLI mode - Command-line interface for headless scanning
- Auto-update - Built-in check for updates (Help menu in GUI)
- Windows Installer - Proper installer that registers in Control Panel
Installation
Option 1: Windows Installer (Recommended)
- Go to Releases
- Download
S-Organizer-0.4.0-Setup.exe - Run the installer — it registers in Control Panel > Programs and Features for easy uninstall
- Windows Defender Warning: If you see a false positive warning, click "More info" → "Run anyway" or add an exclusion for the file
Option 2: Standalone EXE (Windows)
- Go to Releases
- Download
S-Organizer.exe - Windows Defender Warning: If you see a false positive warning, click "More info" → "Run anyway" or add an exclusion for the file
Option 3: Install with pip
pip install s-organizer
Option 4: From source
git clone https://github.com/Shrestha7/S-Organizer.git
cd s-organizer
pip install -r requirements.txt
# Or install in development mode
pip install -e ".[dev,content]"
Usage
GUI Mode (Default)
python -m src.main
# Or simply double-click the exe/installed shortcut
CLI Mode
# One-time scan of a folder
python -m src.main --scan ~/Downloads
# Use custom config
python -m src.main --scan ~/Downloads --config my_config.json
# Show version
python -m src.main --version
Python API
from src.main import FileOrganizer
# Initialize the organizer
organizer = FileOrganizer()
# Add a folder to watch
organizer.add_watched_folder("~/Downloads")
# Start monitoring
organizer.start()
Creating Rules
Create a JSON file in the rules/ directory:
{
"name": "Move PDFs to Documents",
"enabled": true,
"trigger": {
"folder": "~/Downloads",
"recursive": false
},
"match": {
"extensions": [".pdf", ".docx"]
},
"action": {
"type": "move",
"destination": "~/Documents/{extension}/{name}{extension}"
}
}
Rule Format
Trigger
folder: Directory to monitorrecursive: Watch subdirectories (default: false)
Match
extensions: List of file extensions (e.g., [".pdf", ".txt"])name_pattern: Glob pattern (e.g., ".pdf", "report_")min_size/max_size: Size limits (e.g., "10MB", "1GB")min_age_days/max_age_days: Age limitscontent_keywords: Search within file contents
Action
type: "move", "copy", "rename", or "delete"destination: Target path with placeholderstemplate: New name template (for rename)
Placeholders
{name}- File name without extension{extension}/{ext}- File extension{date}- Last modified date (YYYY-MM-DD){year},{month},{day}- Date components{parent}- Parent directory name
Development
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=src
# Lint
ruff check src/
# Type check
mypy src/
Project Structure
s-organizer/
├── src/
│ ├── core/ # File monitoring, rule engine, operations
│ ├── rules/ # Rule definitions and matching
│ ├── gui/ # PyQt6 GUI components
│ └── utils/ # Configuration and helpers
├── tests/ # Test suite
├── rules/ # Sample JSON rule files
├── docs/ # Documentation
└── main.py # Entry point
License
Apache License 2.0 - see LICENSE for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
s_organizer-0.4.0.tar.gz
(49.2 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file s_organizer-0.4.0.tar.gz.
File metadata
- Download URL: s_organizer-0.4.0.tar.gz
- Upload date:
- Size: 49.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31c451a2123bf40416d68853e061dae98c385c7a73612ca804f1c2aff7208d43
|
|
| MD5 |
ec846bdc9a2e250d09b5013e4458d860
|
|
| BLAKE2b-256 |
a528a563eb246aa7ce8cf3cc28430099136ca47ce2c7ec7b392444c38b21da76
|
File details
Details for the file s_organizer-0.4.0-py3-none-any.whl.
File metadata
- Download URL: s_organizer-0.4.0-py3-none-any.whl
- Upload date:
- Size: 53.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b237278243ba607671ee2f6fdaaf55afb363c0020f911d1750fb19bf937b103a
|
|
| MD5 |
33294728cd67715d514a79b532807966
|
|
| BLAKE2b-256 |
445f99c463d45751721d772d43cf3aaaaf49364702f1a6e04eb217a924b17a95
|