Git Product home page Git Product logo

renamer's Introduction

Renamer

A bulk renaming tool for files.

Features

  • Rename one or several patterns in your files using the powerful Rust regex engine.
  • Add an increment as a prefix or suffix to files.

And, uh, it's pretty speedy I guess? I'm hoping it's cross platform too but so far I have only tested it on *nix systems.

Installation

Have a look at the releases page for pre-built binaries.

With Cargo.

$ cargo install renamer

Usage

USAGE:
    renamer [FLAGS] [OPTIONS] <pattern> <files>...

FLAGS:
    -d, --dry-run                 Perform a dry-run. Do everything but the actual renaming. Implies verbose
    -f, --force                   Do not exit or ask for confirmation when overwriting files
    -g, --global                  Test the regular expression against all possible matches instead of only the first
    -h, --help                    Prints help information
        --ignore-invalid-files    Ignores directories passed to the program as files. Useful for shell globbing
    -i, --interactive             Ask for confirmation before overwrite. The program will otherwise exit unless --force
                                  is passed
    -V, --version                 Prints version information
    -v, --verbose                 Print operations as they are being performed

OPTIONS:
    -e, --regexp <patterns>...
            Additional patterns. These can be supplied multiple times. Patterns are executed in the order they are
            passed, starting with the mandatory pattern
        --prefix-increment <prefix-increment>
            Prefix files with an increasing counter in the specified format. E.g. 0501 => 0501filename, 0502filename.
            Applied after pattern replacements
        --suffix-increment <suffix-increment>
            See --prefix-increment. Will try to insert suffix before the file extension


ARGS:
    <pattern>     Regex pattern to match and the string to replace it with. (REGEX=REPLACEMENT)
    <files>...    Files to rename

Examples

Add a prefix or a file extension.

# Add a prefix
$ renamer '^=2020-07-18 ' img*

# Add an extension
$ renamer '$=.bak' file1 file2

# Change extension
$ renamer 'JPEG$=jpg' *.JPEG

# Multiple patterns. Change extension and remove a prefix.
$ renamer 'JPEG$=jpg' -e '^some_prefix_=' *

Rearrange parts of files. The following describes the various ways to use capture groups, including named groups.

$ renamer --verbose '(?P<index>\d{2}\.) (.*)\.(?P<ext>)=${index} Lady Gaga - $2.$ext' *.mp3
01. Chromatica I.mp3 -> 01. Lady Gaga - Chromatica I.mp3
02. Alice.mp3 -> 02. Lady Gaga - Alice.mp3
03. Stupid Love.mp3 -> 03. Lady Gaga - Stupid Love.mp3
04. Rain On Me.mp3 -> 04. Lady Gaga - Rain On Me.mp3
05. Free Woman.mp3 -> 05. Lady Gaga - Free Woman.mp3
06. Fun Tonight.mp3 -> 06. Lady Gaga - Fun Tonight.mp3
07. Chromatica II.mp3 -> 07. Lady Gaga - Chromatica II.mp3
08. 911.mp3 -> 08. Lady Gaga - 911.mp3
09. Plastic Doll.mp3 -> 09. Lady Gaga - Plastic Doll.mp3
10. Sour Candy.mp3 -> 10. Lady Gaga - Sour Candy.mp3
11. Enigma.mp3 -> 11. Lady Gaga - Enigma.mp3
12. Replay.mp3 -> 12. Lady Gaga - Replay.mp3
13. Chromatica III.mp3 -> 13. Lady Gaga - Chromatica III.mp3
14. Sine From Above.mp3 -> 14. Lady Gaga - Sine From Above.mp3
15. 1000 Doves.mp3 -> 15. Lady Gaga - 1000 Doves.mp3

Add digits to easily sort files. Useful if you were to flatten directory structures but still want your files nicely sorted.

$ renamer -v '^=_' --prefix-increment 0201 Westworld01.mkv Westworld.S02E02.mkv Westworld_3.mkv
Westworld01.mkv -> 0201_Westworld01.mkv
Westworld.S02E02.mkv -> 0202_Westworld.S02E02.mkv
Westworld_3.mkv -> 0203_Westworld_3.mkv

Also possible to add suffixes with --prefix-suffix.

Acknowledgements

Inspired greatly by the original rename.pl. The aim is to have similar features but with faster execution time and a slightly more intuitive syntax for those not so familiar with regexes.

renamer's People

Contributors

adriangoransson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

docoder

renamer's Issues

Print warnings (or maybe exit prematurely) on "bad" patterns

Some patterns will result in an empty string which will return an IO error. Easy to catch and present nicely.

For some patterns the results will have leading dots. Those files will then be hidden on *nix systems. This is hard to spot without --verbose or --dry-run.

Support string patterns around increments

Currently --{pre,suf}fix-increment supports a starting index and a formatting width. The input 0503 will produce 0503, 0504, 0505 and so on.

The increments are tacked on at the beginning or end though with no separation from the original file name. 0503file.jpg or file0503.jpg. A workaround is to add a delimiter using a pattern as increments are added after the patterns have been applied.

Support before<digits>after.

Idea

struct Increment {
     /// String template.
    raw: String,
    /// Where to insert formatted digits in `raw`.
    inc_pos: usize,
    width: usize,
    start: usize,
}

The input `-0503@' would yield

Increment {
    raw: "-@",
    inc_pos: 1,
    width: 3,
    start: 4,
}

To avoid ambiguity, prohibit more than one group of digits in args.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.