/renamer

Batch rename files and folders, recursively

Primary LanguageJavaScriptMIT LicenseMIT

view on npm npm module downloads Build Status Dependency Status js-standard-style

renamer

Batch rename files and folders.

Install

Install node then:

$ npm install -g renamer

Linux/Mac users may need to run the above with sudo

Usage

  renamer
  Batch rename files and folders.

  Usage
  $ renamer <options> <files>

  -f, --find <string>      The find string, or regular expression when --regex is set. If not set, the whole filename will be replaced.
  -r, --replace <string>   The replace string. With --regex set, --replace can reference parenthesised substrings from --find with $1, $2, $3
                           etc. If omitted, defaults to a blank string. The special token '{{index}}' will insert an incrementing number per
                           file processed.
  -e, --regex              When set, --find is intepreted as a regular expression.
  -d, --dry-run            Used for test runs. Set this to do everything but rename the file.
  -i, --insensitive        Enable case-insensitive finds.
  -v, --verbose            Use to print additional information.
  -h, --help               Print usage instructions.

  for more detailed instructions, visit https://github.com/75lb/renamer

For more information on Regular Expressions, see this useful guide.

Don't forget to test your rename first using --dry-run!

Recursing

Renamer comes with globbing support built in (provided by node-glob), enabling recursive operations. To recurse, use the ** wildcard where a directory name would appear to apply the meaning "any directory, including this one".

For example, this command operates on all js files in the current directory:

$ renamer --find this --replace that '*.js'

this command operates on all js files, recursively:

$ renamer --find this --replace that '**/*.js'

this command operates on all js files from the lib directory downward:

$ renamer --find this --replace that 'lib/**/*.js'

Bash users without globstar will need to enclose the glob expression in quotes to prevent native file expansion, i.e. '**/*.js'

Examples

Some real-world examples.

Windows users: the single-quotation marks used in the example commands below are for bash (Mac/Linux) users, please replace these with double-quotation marks on Windows.

Simple replace

$ renamer --find '[bad]' --replace '[good]' *
BeforeAfter
.
├── A poem [bad].txt
├── A story [bad].txt
.
├── A poem [good].txt
├── A story [good].txt

Case insenstive finds

$ renamer --insensitive --find 'mpeg4' --replace 'mp4' *
BeforeAfter
.
├── A video.MPEG4
├── Another video.Mpeg4
.
├── A video.mp4
├── Another video.mp4

Strip out unwanted text

$ renamer --find 'Season 1 - ' *
BeforeAfter
.
├── Season 1 - Some crappy episode.mp4
├── Season 1 - Load of bollocks.mp4
.
├── Some crappy episode.mp4
├── Load of bollocks.mp4

Simple filename cleanup

$ renamer --regex --find '.*_(\d+)_.*' --replace 'Video $1.mp4' *
BeforeAfter
.
├── [ag]_Annoying_filename_-_3_[38881CD1].mp4
├── [ag]_Annoying_filename_-_34_[38881CD1].mp4
├── [ag]_Annoying_filename_-_53_[38881CD1].mp4
.
├── Video 3.mp4
├── Video 34.mp4
├── Video 53.mp4

Give your images a new numbering scheme

$ renamer --replace 'Image{{index}}.jpg' *
BeforeAfter
.
├── IMG_5776.JPG
├── IMG_5777.JPG
├── IMG_5778.JPG
.
├── Image1.jpg
├── Image2.jpg
├── Image3.jpg

do something about all those full stops

$ renamer --regex --find '\.(?!\w+$)' --replace ' ' *
BeforeAfter
.
├── loads.of.full.stops.every.where.jpeg
├── loads.of.full.stops.every.where.mp4
.
├── loads of full stops every where.jpeg
├── loads of full stops every where.mp4

if not already done, add your name to a load of files

$ renamer --regex --find '(data\d)(\.\w+)' --replace '$1 (checked by Lloyd)$2' *
BeforeAfter
.
├── data1.csv
├── data2 (checked by Lloyd).csv
├── data3.xls
.
├── data1 (checked by Lloyd).csv
├── data2 (checked by Lloyd).csv
├── data3 (checked by Lloyd).xls

rename files and folders, recursively

$ renamer --find 'pic' --replace 'photo' '**'
BeforeAfter
.
├── pic1.jpg
├── pic2.jpg
└── pics
    ├── pic3.jpg
    └── pic4.jpg
.
├── photo1.jpg
├── photo2.jpg
└── photos
    ├── photo3.jpg
    └── photo4.jpg

prefix files and folders, recursively

$ renamer --regex --find '^' --replace 'good-' '**'
BeforeAfter
.
├── pic1.jpg
├── pic2.jpg
└── pics
    ├── pic3.jpg
    └── pic4.jpg
.
├── good-pic1.jpg
├── good-pic2.jpg
└── good-pics
    ├── good-pic3.jpg
    └── good-pic4.jpg

© 2012-16 Lloyd Brookes <75pound@gmail.com>. Documented by jsdoc-to-markdown.