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 +
- 📅 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
Python3.10+ExifTool
- Windows 11 x64
- Linux Ubuntu
- Cli & Gui
> python -m file_swirl.gui
- 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 & Install: https://exiftool.org/
- For Windows Installer: https://oliverbetz.de/pages/Artikel/ExifTool-for-Windows
For development
> pip install -e .
For final build testing
> python -m pip install .pip install file-swirl
> python -m build
> pip install dist/file_swirl-0.0.10-py3-none-any.whl> python -m file_swirl.cli -h> python -m file_swirl.cli --input_paths "E:\\src" --output_path "E:\\dest"--shift_type copy
--nested_order date
--process_type linear
--file_extensions "{pre-defined inside constants}"--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}"🔁 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 "parallelCurrently 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]
Linux : export PYTHONPATH=.
WIN: set PYTHONPATH=.
- See the full RoadMap for upcoming features and ideas.
