Skip to main content

A CLI organizer you didn’t know you needed — yet.

Project description

Filecraft

A CLI organizer you didn’t know you needed — yet.

This is the Python implementation of Filecraft, focused on safe and repeatable file organization workflows.

Demo

Watch Filecraft in action:

https://github.com/murtazapatel89100/Filecraft/blob/main/assets/demo-video.mp4

Requirements

  • Python >=3.10,<3.15

Distribution

  • Package target: PyPI (filecraft-cli)
  • CLI command: filecraft
  • Standalone binary: Filecraft (PyInstaller)

Install / Run

Option 1: Local development (Poetry)

poetry install
poetry run filecraft --help

Option 2: PyPI install (release users)

pip install filecraft-cli
filecraft --help

Option 2: Run module directly (without installing script)

PYTHONPATH=src python -m file_organiser_python.main --help

Commands

  • filecraft rename
  • filecraft separate
  • filecraft merge
  • filecraft revert

All commands support --dry-run to preview actions without moving files. Working directory flags are validated before any --target-dir creation prompt.

rename

Renames files in working_dir and moves them to target_dir. By default names are numeric (1.ext, 2.ext, ...); with --rename-with they become prefixed (name_1.ext, name_2.ext, ...).

Options

  • --working-dir PATH (default: current directory)
  • --target-dir PATH (default: current directory)
  • --recursive (include files from subdirectories at unlimited depth)
  • --dry-run
  • --history (save history file for revert)
  • --rename-with TEXT (optional base name prefix, e.g. invoice)

If --target-dir is provided and does not exist, the CLI prompts to create it (y/n). Declining exits with a --target-dir error.

Rename Example

filecraft rename --working-dir ./downloads --target-dir ./renamed --history
filecraft rename --working-dir ./downloads --target-dir ./renamed --rename-with invoice

separate

Separates files according to mode.

Separate Modes

  • extension: Move files of a specific extension (e.g. .pdf) into TARGET/PDF
  • date: Move files modified on a specific date (or today) into TARGET/YYYY-MM-DD
  • extension_and_date: Combine both filters into TARGET/YYYY-MM-DD/EXT
  • file: Sort all files by file type category (IMAGES, VIDEOS, DOCUMENTS, ARCHIVES, etc.)

Separate Options

  • --mode [extension|date|extension_and_date|file] (default: extension)
  • --extension TEXT (required for extension and extension_and_date)
  • --file-type TEXT (optional for file; accepts category like documents or extension like pdf)
  • --date YYYY-MM-DD (used by date and extension_and_date; validated)
  • --working-dir PATH (default: current directory)
  • --target-dir PATH (default: current directory)
  • --recursive (include files from subdirectories at unlimited depth)
  • --dry-run
  • --history

Separate Examples

filecraft separate --mode extension --extension pdf --working-dir ./in --target-dir ./out
filecraft separate --mode date --date 2026-03-01 --working-dir ./in --target-dir ./out
filecraft separate --mode extension_and_date --extension .jpg --date 2026-03-01 --working-dir ./in --target-dir ./out
filecraft separate --mode file --working-dir ./in --target-dir ./out
filecraft separate --mode file --file-type pdf --working-dir ./in --target-dir ./out

revert

Reverts moves using a history file.

Revert Options

  • --directory PATH (searches latest history in that directory; default: current directory)
  • --history-file PATH (use a specific history file)
  • --dry-run
  • --keep-history (do not delete history file after successful revert)

Revert Examples

filecraft revert --directory ./out
filecraft revert --history-file ./out/.organizer_history_2026-03-01_12-00-00-123456.json

merge

Merges files from multiple working_dir locations into a single target_dir.

Merge Modes

  • extension: Merge files of a specific extension into TARGET/EXT
  • date: Merge files modified on a specific date (or today) into TARGET/YYYY-MM-DD
  • extension_and_date: Combine both filters into TARGET/YYYY-MM-DD/EXT
  • file: Merge all files by file type category (IMAGES, VIDEOS, DOCUMENTS, ARCHIVES, etc.)

Merge Options

  • --mode [extension|date|extension_and_date|file] (default: extension)
  • --extension TEXT (required for extension and extension_and_date)
  • --date YYYY-MM-DD (used by date and extension_and_date; validated)
  • --working-dir PATH (required, repeat for multiple source directories)
  • --target-dir PATH (default: current directory)
  • --recursive (include files from subdirectories at unlimited depth)
  • --dry-run
  • --history

When --recursive is set and multiple --working-dir flags are provided, Filecraft traverses all listed working directories recursively.

Merge Examples

filecraft merge --mode extension --extension pdf --working-dir ./downloads --working-dir ./desktop --target-dir ./merged
filecraft merge --mode date --date 2026-03-01 --working-dir ./in1 --working-dir ./in2 --target-dir ./merged
filecraft merge --mode extension_and_date --extension .jpg --date 2026-03-01 --working-dir ./camera --working-dir ./phone --target-dir ./merged
filecraft merge --mode file --working-dir ./in1 --working-dir ./in2 --target-dir ./merged

Notes

  • History files are saved with a timestamped name like .organizer_history_YYYY-MM-DD_HH-MM-SS-ffffff.json.
  • File collisions are handled safely by appending suffixes like _1, _2, etc.
  • Compound extensions such as .tar.gz are recognized when sorting by file type.

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

filecraft_cli-1.1.0.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

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

filecraft_cli-1.1.0-py3-none-any.whl (15.5 kB view details)

Uploaded Python 3

File details

Details for the file filecraft_cli-1.1.0.tar.gz.

File metadata

  • Download URL: filecraft_cli-1.1.0.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for filecraft_cli-1.1.0.tar.gz
Algorithm Hash digest
SHA256 bb44ee39d4f56e5a7a92b4e28c31f50334e6c8458758206ff2268c4da1f6bd7b
MD5 45e9b2fe998c2833598e24c68d04c2aa
BLAKE2b-256 4570e4049225ea7b8d7ada41e1baf109ea0451b12872b7c5371c683165f7ae67

See more details on using hashes here.

Provenance

The following attestation bundles were made for filecraft_cli-1.1.0.tar.gz:

Publisher: release.yml on murtazapatel89100/Filecraft

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file filecraft_cli-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: filecraft_cli-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for filecraft_cli-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0dab51054a1b1aa6e9be04f1ed8c91ec65631a242702cff0ca53107b674b85d4
MD5 c762a44ab18c15e65b67d6d8713789df
BLAKE2b-256 9e524cbe2a38d58589998f537bdc98b9f224d5b5a286fa3c88a27b873f3b33bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for filecraft_cli-1.1.0-py3-none-any.whl:

Publisher: release.yml on murtazapatel89100/Filecraft

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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