Skip to main content

A fast, flexible file sorter and organizer

Project description

Python PyPI Downloads

📁 File swirl

Now Organizes files from chaos to order with just one command. Organize photos, videos, documents, and more — cleanly and efficiently — using flexible sorting rules. Can easily process 100 GB +

✨ Organize Features

  • 📅 Sort by Date — Organize files into folders by creation or modified date.
  • 🧩 Filter by File Extension — Group files like .jpg, .mp4, .pdf, etc
  • 🏷️ Sort by Camera Make (EXIF.make) — Useful for photographers to group by device brand.
  • 🔍 Sort by File Type (MIME) — Organize images, videos, documents, etc.
  • 🗂️ Nested Sorting — Apply multi-level sort: e.g., Date → Extension → Make.
  • ⚙️ Custom Sort Key Chains — Chain any supported keys in any order.
  • 🎛️ Parallel Processing Support — Fast sorting using multi-threading.

Also supports to arranges file in nested folder structure like Output/Data/Make/Model for all the options mentioned above.

This scripts lets you filter out specific file extensions while sorting. e.g Sort only .mp4 files from source dir into destination dir

System requriments.

  • Python3.10+
  • ExifTool

✅ Supports

  • Windows 11 x64
  • Linux Ubuntu
  • Cli & Gui

📸 Screenshot

FileSwirl UI

Run Gui *

> python -m file_swirl.gui

Project setup

- git clone https://github.com/NishantGhanate/FileSwirl.git
- cd FileSwirl
- python -m venv venv
- [Win] > venv\Scripts\activate
- [Linux] $ venv/bin/activate
- pip install -r requriments.txt

Download this tool

- Download & Install: https://exiftool.org/
- For Windows Installer: https://oliverbetz.de/pages/Artikel/ExifTool-for-Windows

To install project locally

For development
> pip install -e .

For final build testing
> python -m pip install .

Pypi Installer:

pip install file-swirl

To build project locally

> python -m build
> pip install dist/file_swirl-0.0.10-py3-none-any.whl

HELP

> python -m file_swirl.cli -h

Run cli: default command

> python -m file_swirl.cli --input_paths "E:\\src" --output_path "E:\\dest"

Defaults Args for cli

--shift_type copy
--nested_order date
--process_type linear
--file_extensions "{pre-defined inside constants}"

Args and its values

--shift_type : copy | move
--nested_order : alphabet date file_extension file_extension_group make model
--process_type : linear | parallel
--file_extensions "{pre-defined inside constants all basic formats}"

Examples:

🔁 Move files from a source to a destination

python -m file_swirl.cli \
  --input_paths "E:\\src" \
  --output_path "E:\\dest" \
  --shift_type "move"

🗃️ Move files and organize by nested folders: date file_extension

python -m file_swirl.cli \
  --input_paths "E:\\src" \
  --output_path "E:\\dest" \
  --shift_type "move" \
  --nested_order date file_extension

🏷️ Organize files by camera make/brand

python -m file_swirl.cli \
  --input_paths "E:\\src" \
  --output_path "E:\\dest" \
  --nested_order make

⚡ Copy from multiple folders in parallel mode

python -m file_swirl.cli \
  --input_paths "E:\\src" "E:\\temp" \
  --output_path "E:\\dest" \
  --shift_type "copy" \
  --process_type "parallel

🧱 Architecture:

Currently its limited to 1 producer and 4 q each thread will consume from this q

+-----------------+       +------------------+
|   Producer(s)   | --->  |  Queue (Stream)  | ---> [Processor 1]
| (dir scanners)  |       |  file paths      | ---> [Processor 2]
+-----------------+       +------------------+ ---> [Processor N]

Set to test code locally

Linux : export PYTHONPATH=.
WIN: set PYTHONPATH=.

📌 Project Roadmap

  • See the full RoadMap for upcoming features and ideas.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

file_swirl-0.1.0.tar.gz (29.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

file_swirl-0.1.0-py3-none-any.whl (36.7 kB view details)

Uploaded Python 3

File details

Details for the file file_swirl-0.1.0.tar.gz.

File metadata

  • Download URL: file_swirl-0.1.0.tar.gz
  • Upload date:
  • Size: 29.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for file_swirl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a1c00c9ff239d6a303d79bb076d68791f7abe42d1d0834cc280b89ca03099b94
MD5 496a1308d554b318e3607903a35bcee5
BLAKE2b-256 105eba6fb5de33d635e923cba023d783ad9e7bbb978973f8b0d4199ecad45a28

See more details on using hashes here.

File details

Details for the file file_swirl-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: file_swirl-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 36.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for file_swirl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3a6970efb208f1c70e63afade164cde0737e5152006871761e83da5a4e98d3e1
MD5 5b4cac5e978aa9b832d49dc5c0b9fcb2
BLAKE2b-256 0a60d01a3b1247db90ef923ea43372015564404d2e2a0fb966f6116406589e60

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page