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
- Undo support - Reverse any file operation from history
- Duplicate detection - Find and handle duplicate files
- JSON rules - Easy to create, share, and version control rules
- Auto-update - Built-in check for updates (Help menu in GUI)
Installation
Option 1: Windows Installer (Recommended)
- Go to Releases
- Download
S-Organizer-0.2.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.2.0.tar.gz
(37.0 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.2.0.tar.gz.
File metadata
- Download URL: s_organizer-0.2.0.tar.gz
- Upload date:
- Size: 37.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70bb78a9b530cc0e4404109e6ee1d23166f0277a7651f5c3ab7eea36b219ed58
|
|
| MD5 |
9747cfc4241648854905cfd418054609
|
|
| BLAKE2b-256 |
7516166129430735f3df203a7ff734d3b52b8df0b19899be873bd8a22a9000e0
|
File details
Details for the file s_organizer-0.2.0-py3-none-any.whl.
File metadata
- Download URL: s_organizer-0.2.0-py3-none-any.whl
- Upload date:
- Size: 40.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fccf97ff7772d056c55773be343b162ef516159407dbe7a31c03a902d2422c8
|
|
| MD5 |
dcf254eb2bf32464f48b0be3d4bf5e7b
|
|
| BLAKE2b-256 |
8ccb8851fdcd66663034245022f75d6846b3c17bfd48f530c412dfed669d4aac
|