sortit 0.1.0

Sortit is a Rust-based CLI tool to automatically organize your files by type and modified date, with duplicate detection and an optional watch mode for real-time organization.
# FileOrganizer

**FileOrganizer** is a Rust-based CLI tool to automatically organize your files by **type** and **modified date**, with **duplicate detection** and an optional **watch mode** for real-time organization.

## Working demo


---

## Usage / Testing

You can run the program with different flags. Below is a table of common test commands:

| Command | Description |
|---------|-------------|
| `cargo run -- --path ./test-folder` | Organize files in `./test-folder` once, without watching. |
| `cargo run -- --path ./test-folder --watch` | Organize files in `./test-folder` and continuously watch for new files. |


---


## Features

- 🗂️ Organizes files into folders by type:
  - Images: `jpg`, `jpeg`, `png`, `bmp`, `tiff`
  - GIFs: `gif`
  - Videos: `mp4`, `mov`, `avi`, `mkv`
  - Audio: `mp3`, `wav`, `flac`
  - Documents: `pdf`, `docx`, `txt`
  - Archives: `zip`, `rar`, `7z`
  - Others: anything else
- Creates **date-based subfolders** (e.g., `images/2025-10-25`)
- Detects **duplicate files** using SHA256 hashing
- Optional **watch mode** to auto-organize new files in real time
- Fast and lightweight using Rust standard library and powerful crates

---

## TODO / Planned Features

- **Metadata-based sorting (`--metadata`)**
  
  If `--metadata` is used:
  - The program will try to read EXIF metadata (like “Date Taken”) from image files.
  - It will sort images into folders based on that date, instead of just using file type or last modified date.

  If `--metadata` is **not** used:
  - The program falls back to regular sorting based on file extension and last modified date.


- **Upload to cloud / Google Drive via CLI** *(Planned)*

  - Integrate CLI commands to upload organized files to Google Drive or other cloud storage.
  - This will allow automatic backup after organization.

- **Future enhancements**
  - Support for more file types and custom folder structures.
  - Improved error handling and logging.
  - Configurable rules via a `.toml` or `.yaml` config file.




## Installation

1. Ensure you have [Rust]https://www.rust-lang.org/tools/install installed.
2. Clone this repository: https://github.com/subhdotsol/FileOrganizer.git

```bash
git clone https://github.com/yourusername/FileOrganizer.git
cd FileOrganizer
cargo build