Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/a-bentofreire/renametoix

RenameToIX is a visual Linux file renamer built with Gtk, designed to be an alternative to Linux Mint bulky as file renamer on Nemo, Nautilus and Thunar File Manager.
https://github.com/a-bentofreire/renametoix

gtk gtk3 linux linux-mint python rename-files thunar ubuntu

Last synced: 22 days ago
JSON representation

RenameToIX is a visual Linux file renamer built with Gtk, designed to be an alternative to Linux Mint bulky as file renamer on Nemo, Nautilus and Thunar File Manager.

Awesome Lists containing this project

README

        

# Description

[RenameToIX](https://www.devtoix.com/en/projects/renametoix) is a visual Linux Gtk file renamer featuring an advanced macro ecosystem, seamlessly integrating with Nemo, Nautilus, and Thunar file managers.

Simple macro example:

![Image](https://cdn.jsdelivr.net/gh/a-bentofreire/a-bentofreire/media/renametoix/RenameToIX-Index-Macro-1.gif)

Python lambda expression example:

![Image](https://cdn.jsdelivr.net/gh/a-bentofreire/a-bentofreire/media/renametoix/RenameToIX-Python-Expressions-1.gif)

Reverse Geocoding macro example:

![Image](https://cdn.jsdelivr.net/gh/a-bentofreire/a-bentofreire/media/renametoix/RenameToIX-Reverse-Geocoding-1.gif)

Doc Header macro example:

![Image](https://cdn.jsdelivr.net/gh/a-bentofreire/a-bentofreire/media/renametoix/RenameToIX-Doc-Header-1.gif)

Read section [Integrate](#integrate) on now to integrate with Nemo, Nautilus and Thunar.

If you find this project useful, please, read the [Support this Project](#support-this-project) on how to contribute.

## Features

- GUI and Console mode.
- **Single click macro**.
- Counter, file datetime, and extension Macros.
- Function Macros with regex group capture: `lower`, `upper`, `capitalize` and `title`.
- Python lambda expressions macro.
- Reverse geocoding of JPEG images from GPS information macro via [geo plugin](#geo-plugin).
- Header of Word documents macro via [doc plugin](#doc-plugin).
- Custom macro extensions using [plugins](#plugins).
- Start index for counter macro.
- Configurable list of macros.
- Revert previous renames (first activate on Settings dialog).
- Send notification after renames (first activate on Settings dialog).
- Integration with Nemo, Nautilus and Thunar File Manager.
- Limited support for [mtp devices](#mtp-devices) (Smartphones, Cameras, etc...).

## Installation

```bash
sudo add-apt-repository ppa:a-bentofreire/toix
sudo apt-get update
sudo apt install renametoix
```

## Requirements

RenameToIX uses `xdg-open` and `notify-send` external commands.

## Macros

- `%n, %0n ... %00000n` - counter
- `%E` - file extension
- `%Y` - file 4-digit year
- `%m` - file 2-digit month
- `%d` - file 2-digit day
- `%H` - file 2-digit hour
- `%M` - file 2-digit minute
- `%S` - file 2-digit second
- `%0{upper}` `%0{u}` - uppercase (function)
- `%0{lower}` `%0{l}` - lowercase (function)
- `%0{capitalize}` `%0{c}` - capitalize (function)
- `%0{title}` `%0{t}` - capitalize (function)
- `%:{expr}` - evaluates [python lambda expressions](#python-lambda-expressions)
- `%!{geo:%country%, %city%}` - replaces with the "country", "city" from the JPEG image GPS info via [geo plugin](#geo-plugin)
- `%!{doc:%header%}` - replaces with the "header" with the first header in a doc file [doc plugin](#doc-plugin)

## Macro functions

The macro functions can also be used with regular expressions to capture groups.

ex1:
- Replace: `%0{title}`
- Filename: `my document.png` will become `My Document.png`

ex2:
- Find: `..(NEW).(design)`
- Replace: `%1{l}-%2{u}`
- Filename: `n-myNEW design.png` will become `n-new-DESIGN.png`

## Python Lambda Expressions

The `%:{expr}` will internally evaluate a lambda expression: `eval(f"lambda m: {expr}")(groups)`

where groups are:
- if regular expressions, then are the captured groups from a regular expression.
- otherwise, it's the text to find.

ex:
- Find: `^(.*)-(.*)$`
- Replace: `%:{m[2] - m[1]}`
- Regular Expression: `checked`.
- Filename: `code-actions.py` will become `Actions - Code.py`

### Features and Limitations

- The expression can't contain a closed curly bracket `}`.
- The evaluator doesn't do any security checks, so run it at your own risk.

## Plugins

The `%!{plugin_name:expr}` will call an external plugin to evaluate the expression.

- Plugins are python scripts located on `/usr/lib/renametoix/plugins`.
- A plugin must have a function named `get_worker()`, returning an instance of a class with the following methods:
- The expression can't contain a closed curly bracket `}`.

| Method | Description |
| -- | -- |
| `is_slow(self)` | returns `True` if the plugin requires slow operations |
| `get_extensions(self)` | returns a list of file extensions supported |
| `eval_expr(self, macro, filename, groups)` | evaluates a macro. It should be a fast operation |
| `prepare(self, files)` | for each file, it will prepare the macro evaluation
if `is_slow` is `True`, it will run in a working thread if it's GUI mode |

## Geo Plugin

Geo Plugin performs reverse geocoding.

- Requires install python packages: `pip install geopy piexif`.
- Supports the following geocoding fields: `country`, `state`, `city`, `postcode`, `suburb`.
- Supports `.jpg` and `.jpeg` file extensions.
- Ending spaces, commas and semi-commas are striped.

ex:
- Replace: `%!{geo:%country%, %city%}`
- Filename: `IMG_.jpg` will become `MyCountry, MyCity.jpg`

## Doc Plugin

Doc Plugin extracts the first header from a Word doc/docx file.

- Requires install python package: `pip install python-docx`.
- Supports the following geocoding fields: `header`.
- Supports `.doc` and `.docx` file extensions.

ex:
- Replace: `%!{doc:%header%}`
- Filename: `a.docx` will become `MyHeaderH1.docx`

## Running in console mode

To activate on console mode, use `--console` on command line:

```plaintext
usage: renametoix [-h] [-console] [-start-index START_INDEX] [-reg-ex] [-include-ext] [-find FIND] [-replace REPLACE] [-allow-revert] [-test-mode] [-revert-last] [files ...]

positional arguments:
files Source files

options:
-h, --help show this help message and exit
-console Console mode
-start-index START_INDEX
Start index used with there is a %0n macro
-reg-ex Uses regular expressions on the find field
-include-ext Renames including the file extension
-find FIND Text to Find
-replace REPLACE Text to Replace
-allow-revert Generates a revert file (console mode)
-test-mode Outputs only the new result, doesn't rename (console mode)
-revert-last Reverts last rename and exits
```

## Revert the last rename in console mode

If the previous console mode rename was executed with `-allow-revert`, then:
`renametoix -revert-last` will revert the last rename.

## Integrate

RenameToIX can be integrated with Nemo, Nautilus and Thunar.
On RenameToIX application, click on the Settings button, and then `Integrate` button.

- Nemo Bulk Rename: When you press F2 it will use **RenameToIX** instead of bulky.
- Nemo Action: On context menu, it will include an item named **RenameToIX**.
- Nautilus Script: On context menu Scripts, it will include an item named **RenameToIX**.
- Thunar Action: On context menu, it will include an item named **RenameToIX**.

## Languages

- English
- Portuguese
- Spanish
- German
- Russian
- Ukrainian

## Mtp Devices

RenameToIX can rename files on mtp devices with the following limitations:
- It doesn't support revert.
- The file is copied and the deleted the original, this is a slow operation and doesn't preserves the timestamp.
- When modifying the Find Replace fields, it's checking if the new filename exists on the destination. This is a slow operation.

## Translations

To improve translations:
- Clone the project from [Github](https://github.com/a-bentofreire).
- Update the translation on `tools/l10n.po`.
- Run `convert-l10n.sh`.

## Support this Project

If you find this project useful, consider supporting it:

- Donate:

[![Donate via PayPal](https://www.paypalobjects.com/webstatic/en_US/i/btn/png/blue-rect-paypal-34px.png)](https://www.paypal.com/donate/?business=MCZDHYSK6TCKJ&no_recurring=0&item_name=Support+Open+Source&currency_code=EUR)

[![Buy me a Coffee](https://www.devtoix.com/assets/buymeacoffee-small.png)](https://buymeacoffee.com/abentofreire)

- Visit the project [homepage](https://www.devtoix.com/en/projects/renametoix)
- Give the project a ⭐ on [Github](https://github.com/a-bentofreire/renametoix)
- [Translate into your language](#translations)
- Spread the word
- Follow me:
- [Github](https://github.com/a-bentofreire)
- [LinkedIn](https://www.linkedin.com/in/abentofreire)
- [Twitter/X](https://x.com/devtoix)

## License

GPLv3 License

## Contributions

- [claimsecond](https://github.com/claimsecond) - Translations in Russian and Ukrainian

## Copyrights

(c) 2024 [Alexandre Bento Freire](https://www.a-bentofreire.com)