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
- 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 built-in scanner
- 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
- Auto-update - Built-in check for updates (Help menu in GUI)
Installation
Option 1: Windows Installer (Recommended)
- Go to Releases
- Download
S-Organizer-0.3.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
CLI Mode
python -m src.main
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.3.0.tar.gz
(43.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.3.0.tar.gz.
File metadata
- Download URL: s_organizer-0.3.0.tar.gz
- Upload date:
- Size: 43.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 |
8fe71e987b85022ae73839411c5d2eb667a70b3a4463d176828ad4b5f260f8ce
|
|
| MD5 |
b5239ab8ae34392172123dbdbac3b823
|
|
| BLAKE2b-256 |
3f9af5d5a37e7f4a9eca37a616d6e9bd375ef9bec17aeffb866379c9410d36c7
|
File details
Details for the file s_organizer-0.3.0-py3-none-any.whl.
File metadata
- Download URL: s_organizer-0.3.0-py3-none-any.whl
- Upload date:
- Size: 48.6 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 |
3643f1a962aa367dd9d4bd85fa1b910d4cde570afb7054059442b818058e14f9
|
|
| MD5 |
80e55efccbc5387e576e5654031d2cd9
|
|
| BLAKE2b-256 |
113faacd75c99efd9b61b7b3febafbfb5652bb4d9d5a940830e1821e4cf7e081
|