A file management automation tool.

Overview

organize AGPLv3+

Crate Release Documentation

A file management automation tool.

Current Status

This is in really early development. Please come back later!

Background

The Python organize is a file management automation tool.

From their docs:

Your desktop is a mess? You cannot find anything in your downloads and documents? Sorting and renaming all these files by hand is too tedious? Time to automate it once and benefit from it forever. organize is a command line, open-source alternative to apps like Hazel (macOS) or File Juggler (Windows).

This is a Rust implementation of the same concept.

Examples

  • Filter files, which are smaller than 20KB in one location:

    organize filter size -l C:\Users\dailyuse\dev-src\organize\docs\screenshots -t files --range ..20KB

    This filter uses the range syntax (always inclusive) of Rust:

    • ..11MB => smaller than
    • 15MB.. => bigger than
    • 10KB..20MiB => bigger than 10 KB, but smaller than 20 MiB

    NOTE: You can use decimal (metric) and binary (IEC) multiple-byte units. E.g., KiB or KB, GB or GiB. They will be converted accordingly and are case-insensitive.

  • Filter files by their mimetype:

    organize filter mimetype -l C:\organize\docs\screenshots -t files --mimetype image/jpeg

  • Filter files by their creation date (created in the last 5 days), ignore paths that have target\ in their name, recursive, maximum 4 levels deep.

    organize filter -r -m 4 created -l . -t files --ignore-path target\ --range ..5d

  • Filter files, which file stem ends with go, recursive, maximum 2 levels deep:

    organize filter -r -m 2 name -l "C:\organize\" -t files --ends-with "go"

  • Filter files in two locations, which extensions match rs or toml, recursive, maximum 2 levels deep

    organize filter -r -m 2 extension -l C:\organize -l D:\folders -t files --exts rs --exts toml

  • Filter files and folders, which are empty (0 bytes or no files in directory), recursive, maximum 4 levels deep, ignore git in path names

    organize filter -r -m 4 empty -l "C:\organize\" -t both --ignore-path git

  • Filter files and folders, which are empty (0 bytes or no files in directory), recursive, maximum 4 levels deep, ignore git only in file names

    organize filter -r -m 4 empty -l "C:\organize\" -t both --ignore-name git

Media

Be aware: This is WIP. Not all functionality is implemented, (yet).

Main

organize main menu

Filters

organize filters

Actions

organize actions

Goals

For now the first goal for this Rust version of organize is to have feature parity with its Python equivalent.

BUT: I want to take another approach on tackling the problem. It is also relatively complicated to map all the stuff within a config file, because we are bound to the syntax of yaml/json/toml/ron.

Maybe this is exactly the problem to solve!

Basically you want to have a configuration file, which replaces a mini scripting language. With predefined filters and actions that are applied to the items that the filter spits out.

Basically almost everything in the configuration files are parameters for functions/methods.

This makes everything more complicated.

  1. What if we implement rusty organize in a way, that we can call organize filter extension --ext "exe, msi, apk" --path {} and it spits out all the paths that match this precoded filter? This way we can already utilize it easily within shell scripts.

  2. On the second implementation stage, we can embed a scripting engine like rhai, where we expose some functionality of rusty organize as functions and register them with the rhai engine.

  3. Instead of pressing everything in a complicated configuration file syntax, we can utilize a scripting language and boil it down to its minimum syntax.

That being said, a big factor for the Rust reiteration for me is that I like Rust. I want to reimplement organize's approach in a language that has better error handling, and makes it easier to maintain software. That is fast and at the same time makes development less error prone.

I'm the first user of the Rust implementation, and will be going to use it with my private files. Thus an important goal for me is stability.

License

AGPL-3.0-or-later; see LICENSE.

You might also like...
A simple, TUI git management tool

Gitten Gitten is git project manager with multiple repositories. With gitten you can check out to new branches and tag branches from you active. Prere

A project management tool for data science and bioinformatics. If you want it, Kerblam it!
A project management tool for data science and bioinformatics. If you want it, Kerblam it!

Warning kerblam run and kerblam package are complete but still untested. Please do use them, but be careful. Always have a backup of your data and cod

Single File Assets is a file storage format for images

SFA (Rust) Single File Assets is a file storage format for images. The packed images are not guaranteed to be of same format because the format while

SAORI for UKAGAKA. Convert a image file to resized png file.

Resized Png GitHub repository これは何? デスクトップマスコット、「伺か」で使用できるSAORIの一種です。 機能としては、指定した画像ファイルを拡大または縮小し、pngとして出力します。 「伺か」「SAORI」等の用語については詳しく説明いたしませんのでご了承下さい。

FileSorterX is an automatic file sorting application that sorts your files into folders based on their file extension
FileSorterX is an automatic file sorting application that sorts your files into folders based on their file extension

FileSorterX is an automatic file sorting application that sorts your files into folders based on their file extension. With FileSorterX, you can easily keep your files organized and find what you need quickly.

My own image file format created for fun! Install the "hif_opener.exe" to open hif files. clone the repo and compile to make your own hif file

Why am i creating this? I wanted to create my own image format since I was 12 years old using Windows 7, tryna modify GTA San Andreas. That day, when

Terminal-UI for the RabbitMQ management API
Terminal-UI for the RabbitMQ management API

RabbiTui A terminal client for the RabbitMQ Management API Installation Homebrew brew tap maxmindlin/rabbitui brew install rabbitui Building from sou

Text-based to-do management CLI & language server
Text-based to-do management CLI & language server

☑️ Todome (日本語版はこちら) Todome is a notation developed for making and editing to-do lists. It is inspired by Todo.txt, and in fact some of the todome not

A diff-based data management language to implement unlimited undo, auto-save for games, and cloud-apps which needs to retain every change.

Docchi is a diff-based data management language to implement unlimited undo, auto-save for games, and cloud-apps which needs to save very often. User'

Releases(v0.4.1)
  • v0.4.1(Jun 5, 2023)

    New Features

    • Reuse existing commands filter/action to output config snippets
    • Implement confirmation dialogue before irreversibly applying an action
    • implement previewing an action
    • split the pipeline into several actors that could be run in parallel if needed

    Bug Fixes

    • Fix descriptions for commands
    • Reexport TemplateStringKind for documentation

    Other

    • add doctests for some actions

    Commit Statistics

    • 7 commits contributed to the release over the course of 1 calendar day.
    • 2 days passed between releases.
    • 7 commits were understood as conventional.
    • 0 issues like '(#ID)' were seen in commit messages

    Commit Details

    view details
    • Uncategorized
      • Fix descriptions for commands (404d0b8)
      • Reuse existing commands filter/action to output config snippets (ea7d264)
      • Implement confirmation dialogue before irreversibly applying an action (975995c)
      • Implement previewing an action (37aad75)
      • Split the pipeline into several actors that could be run in parallel if needed (27f0ad6)
      • Reexport TemplateStringKind for documentation (859f50f)
      • Add doctests for some actions (7144ddd)
    Source code(tar.gz)
    Source code(zip)
  • organize-rs_core-v0.2.3(Jun 5, 2023)

    Documentation

    • update config template with links to filters and actions in documentation

    New Features

    • Reuse existing commands filter/action to output config snippets
    • Implement confirmation dialogue before irreversibly applying an action
    • implement previewing an action
    • split the pipeline into several actors that could be run in parallel if needed

    Bug Fixes

    • Fix insta snapshot tests
    • make doctests for actions pass
    • make doctests for filters pass
    • implement some more fixes for filter doctests
    • fix syntax of filters in doc tests

    Other

    • add doctests for some actions

    Commit Statistics

    • 11 commits contributed to the release over the course of 2 calendar days.
    • 2 days passed between releases.
    • 11 commits were understood as conventional.
    • 0 issues like '(#ID)' were seen in commit messages

    Commit Details

    view details
    • Uncategorized
      • Reuse existing commands filter/action to output config snippets (ea7d264)
      • Implement confirmation dialogue before irreversibly applying an action (975995c)
      • Implement previewing an action (37aad75)
      • Split the pipeline into several actors that could be run in parallel if needed (27f0ad6)
      • Fix insta snapshot tests (ede34ff)
      • Make doctests for actions pass (c73eca5)
      • Add doctests for some actions (7144ddd)
      • Make doctests for filters pass (8631500)
      • Implement some more fixes for filter doctests (9eb60bb)
      • Fix syntax of filters in doc tests (ecac2d3)
      • Update config template with links to filters and actions in documentation (042926f)
    Source code(tar.gz)
    Source code(zip)
  • organize-rs_core-v0.2.2(Jun 3, 2023)

  • v0.3.1(May 25, 2023)

    New Features

    • docs command opens browser
    • adding cli option for filter mode
    • Free the way for applying multiple filters

    Other

    • Switch to jwalk to walk the directory tree parallelized
    • add new run command to run a specified rule from a config or script
    • add new config command to generate and check configs
    • apply multiple filters to walkdir iter

    Refactor

    • improve display
    • Make FilterWalker more configurable for upcoming features
    • make filters use more option/result methods

    Commit Statistics

    • 11 commits contributed to the release over the course of 2 calendar days.
    • 3 days passed between releases.
    • 10 commits were understood as conventional.
    • 0 issues like '(#ID)' were seen in commit messages

    Commit Details

    view details
    • Uncategorized
      • Switch to jwalk to walk the directory tree parallelized (4757013)
      • Add new run command to run a specified rule from a config or script (95b9b3c)
      • Add new config command to generate and check configs (36d02df)
      • Docs command opens browser (1246468)
      • Improve display (543150d)
      • Adding cli option for filter mode (fea4cc1)
      • Make FilterWalker more configurable for upcoming features (14300ea)
      • Free the way for applying multiple filters (33fc910)
      • Fix borrow issues (3d1b0a1)
      • Apply multiple filters to walkdir iter (09c428c)
      • Make filters use more option/result methods (c005013)
    Source code(tar.gz)
    Source code(zip)
  • organize-rs_core-v0.2.1(May 25, 2023)

    New Features

    • add total entry count to output of filters
    • adding cli option for filter mode
    • Free the way for applying multiple filters

    Other

    • Switch to jwalk to walk the directory tree parallelized
    • apply multiple filters to walkdir iter

    Refactor

    • more functional syntax
    • implement custom serializer for MaxDepth
    • Add associated constants for SizeRange and PeriodRange
    • improve display
    • Make FilterWalker more configurable for upcoming features
    • make filters use more option/result methods

    Commit Statistics

    • 12 commits contributed to the release over the course of 2 calendar days.
    • 3 days passed between releases.
    • 11 commits were understood as conventional.
    • 0 issues like '(#ID)' were seen in commit messages

    Commit Details

    view details
    • Uncategorized
      • Add total entry count to output of filters (12b5e9c)
      • More functional syntax (48dd7da)
      • Switch to jwalk to walk the directory tree parallelized (4757013)
      • Implement custom serializer for MaxDepth (8504e82)
      • Add associated constants for SizeRange and PeriodRange (9d55a01)
      • Improve display (543150d)
      • Adding cli option for filter mode (fea4cc1)
      • Make FilterWalker more configurable for upcoming features (14300ea)
      • Free the way for applying multiple filters (33fc910)
      • Fix borrow issues (3d1b0a1)
      • Apply multiple filters to walkdir iter (09c428c)
      • Make filters use more option/result methods (c005013)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(May 21, 2023)

  • v0.2.6(May 21, 2023)

    Chore

    • add description to lib.rs

    Commit Statistics

    • 1 commit contributed to the release.
    • 1 commit was understood as conventional.
    • 0 issues like '(#ID)' were seen in commit messages

    Commit Details

    view details
    • Uncategorized
      • Add description to lib.rs (d2b3328)
    Source code(tar.gz)
    Source code(zip)
  • organize-rs_core-v0.2.0(May 21, 2023)

    New Features (BREAKING)

    • implement range syntax also for date related filters

    Commit Statistics

    • 1 commit contributed to the release.
    • 1 commit was understood as conventional.
    • 0 issues like '(#ID)' were seen in commit messages

    Commit Details

    view details
    • Uncategorized
      • Implement range syntax also for date related filters (13f7560)
    Source code(tar.gz)
    Source code(zip)
  • organize-rs_core-v0.1.6(May 21, 2023)

    New Features

    • Implement size filter
    • Implement parser for byte size conditions for size filter

    Commit Statistics

    • 3 commits contributed to the release.
    • 2 commits were understood as conventional.
    • 0 issues like '(#ID)' were seen in commit messages

    Commit Details

    view details
    • Uncategorized
      • Merge branch 'develop' (7bf59e8)
      • Implement size filter (da1d07a)
      • Implement parser for byte size conditions for size filter (0cf330e)
    Source code(tar.gz)
    Source code(zip)
  • v0.2.5(May 20, 2023)

    New Features

    • Implement mimetype filter

    Commit Statistics

    • 8 commits contributed to the release over the course of 1 calendar day.
    • 1 day passed between releases.
    • 1 commit was understood as conventional.
    • 0 issues like '(#ID)' were seen in commit messages

    Commit Details

    view details

    Uncategorized

    • Implement mimetype filter (345d888)
    • Implement created filter (f07ab6a)
    • Remove human-panic dependency (9382256)
    • Research dependencies (9f12de9)
    • Cargo fix & cargo fmt (ee231a6)
    • Cargo fix (0695061)
    • Add doc comments for ignore args (626a2ac)
    • Implement empty filter and global ignore for file names and directory paths (d51a81a)
    Source code(tar.gz)
    Source code(zip)
  • organize-rs_core-v0.1.5(May 20, 2023)

    New Features

    • Implement mimetype filter

    Commit Statistics

    • 32 commits contributed to the release over the course of 5 calendar days.
    • 1 commit was understood as conventional.
    • 0 issues like '(#ID)' were seen in commit messages

    Commit Details

    view details

    Uncategorized

    • Implement mimetype filter (345d888)

    • Adjusting changelogs prior to release of organize-rs_core v0.1.4, organize-rs v0.2.4 (b00bbe0)

    • Implement last_accessed and last_modified filters (4410c3f)

    • Implement created filter (f07ab6a)

    • Remove human-panic dependency (9382256)

    • Remove unused import (9f56d4c)

    • Cargo fix & cargo fmt (ee231a6)

    • Adjusting changelogs prior to release of organize-rs_core v0.1.3, organize-rs v0.2.3 (c4d5428)

    • Adjusting changelogs prior to release of organize-rs_core v0.1.2, organize-rs v0.2.2 (2ebfdd7)

    • Implement empty filter and global ignore for file names and directory paths (d51a81a)

    • Adjusting changelogs prior to release of organize-rs_core v0.1.1, organize-rs v0.2.1 (1e0e2dc)

    • Update Versions (bb0cbce)\n - Fix file_stem case insensitivity (03509fe)

    • Add description to core lib (3b83e8e)

    • Update workspace manifests (d4eba0d)

    • Adjusting changelogs prior to release of organize-rs_core v0.1.0, organize-rs v0.2.0 (2dbdfe3)

    • Adjusting changelogs prior to release of organize-rs_core v0.1.0, organize-rs v0.2.0 (c008e22)

    • Add Changelogs (3b0ccbd)

    • Update readme and version (287b420)

    • Fix name filter --ends_with to include file_stem (af0efed)

    • Implement name filter (88587b0)

    • Fix some grouping issues in Cli, create cli feature in organize-rs_core (b734e62)

    • Implement filter_by_extension (45e4d5b)

    • First try for implementing a file extension filter (45f2966)

    • Implement stub for filter methods (6c6f0f8)

    • Add boilerplate for matching filters and actions (83c8cbc)

    • Add czkawka_core dependency (5063aec)

    • Refine commands/subcommands (ed535f6)

    • Rethink structure and change roadmap (f5df157)

    • Add actions and filters as subcommands (60df64e)

    • Start parsing config (0e36272)

    • Refactor to workspace and create new core library (0de540b)

    Source code(tar.gz)
    Source code(zip)
Owner
null
Command line tool for cheap and efficient email automation written in Rust

Pigeon Pigeon is a command line tool for automating your email workflow in a cheap and efficient way. Utilize your most efficient dev tools you are al

null 57 Nov 20, 2022
A simple to use and efficient Web Automation Tool.

teemo A simple to use and efficient Web Automation Tool. teemo allows you to do some web automation action(such as click and so on) and crawl some inf

null 3 Nov 22, 2023
This is a `Rust` based package to help with the management of complex medicine (pill) management cycles.

reepicheep This is a Rust based package to help with the management of complex medicine (pill) management cycles. reepicheep notifies a person(s) via

Daniel B 24 Dec 13, 2023
A CI inspired approach for local job automation.

nauman A CI inspired approach for local job automation. Features • Installation • Usage • FAQ • Examples • Job Syntax About nauman is an easy-to-use j

Egor Dmitriev 8 Oct 24, 2022
botwork is a single-binary, generic and open-source automation framework written in Rust for acceptance testing & RPA

botwork botwork is a single-binary, generic and open-source automation framework written in Rust for acceptance testing, acceptance test driven develo

Nitimis 8 Apr 17, 2023
Holo is a suite of routing protocols designed to support high-scale and automation-driven networks.

Holo is a suite of routing protocols designed to support high-scale and automation-driven networks. For a description of what a routing protocol is, p

Renato Westphal 42 Apr 16, 2023
Nodium is an easy-to-use data analysis and automation platform built using Rust, designed to be versatile and modular.

Nodium is an easy-to-use data analysis and automation platform built using Rust, designed to be versatile and modular. Nodium aims to provide a user-friendly visual node-based interface for various tasks.

roggen 19 May 2, 2023
A command-line tool aiming to upload the local image used in your markdown file to the GitHub repo and replace the local file path with the returned URL.

Pup A command line tool aiming to upload the local image used in your markdown file to the GitHub repo and replace the local file path with the return

SteveLau 11 Aug 17, 2022
A tool for determining file types, an alternative to file

file-rs a tool for determining file types, an alternative to file whats done determining file extension determining file type determining file's mime

null 3 Nov 27, 2022
A Yocto setup and management tool that helps you keep your environment up-to-date and in-sync with your team

yb (Yocto Buddy) yb is designed to make it easy to setup and (perhaps more importantly) keep Yocto environments up-to-date and in-sync with your team.

null 13 Oct 31, 2022