ebook_renamer ============= [![Gem Version](https://badge.fury.io/rb/ebook_renamer.svg)][gem] [![Dependency Status](https://gemnasium.com/agilecreativity/ebook_renamer.png)][gemnasium] [![Code Climate](https://codeclimate.com/github/agilecreativity/ebook_renamer.png)][codeclimate] [gem]: http://badge.fury.io/rb/ebook_renamer [gemnasium]: https://gemnasium.com/agilecreativity/ebook_renamer [codeclimate]: https://codeclimate.com/github/agilecreativity/ebook_renamer Bulk rename of ebook files (epub,mobi,pdf) using embedded meta-data (title, author(s)). This version depends on the opensource software called [Calibre][] that comes with [Calibre CLI][] which is very easy to install on OSX or Linux system. Release based on [Semantic Versioning][] version. ### How the file is renamed The file will be renamed using the following format `.by.<author(s)>`.`<extension>` Also the final file name will be sanitized e.g. any multiple occurence of special characters will be replace by given separator char (default to dot) . For example if the ebook contain the title `Start with Why: How Grate Leader Inspire Everyone to Take Action` and the author is `Simon Sinek` then the default output will be `Start.with.Why.How.Great.Leader.Inspire.Everyone.to.Take.Action.by.Simon.Sinek.pdf` Note that the `:` and one space before the word `How` is replaced by one dot string. If the `--sep-string _` is used then the above output will be `Start_with_Why_How_Great_Leader_Inspire_Everyone_to_Take_Action_by_Simon_Sinek.pdf`. ### What you will need - You will need to install [Calibre][] and [Calibre CLI][] on your OS. Please download Calibre binary from [http://calibre-ebook.com/download][] Alternatively if you are using Ubuntu try: ```shell sudo apt-get install calibre calibre-bin # check your installation which ebook-meta #=> /usr/bin/ebook-meta ``` In particular the gem is looking for the `ebook-meta` binary in a path. If this is not installed the error will be raised. #### Tips for OSX installation If you install using the binary above you will need to create a symlink to the `ebook-meta` binary like the following: ```shell # Assume that /usr/local/bin is in your $PATH varaiable cd /usr/local/bin sudo ln -fs /Applications/calibre.app/Contents/MacOS/ebook-meta /usr/local/bin/ebook-meta source ~/.zshrc # or source ~/.bashrc which ebook-meta ``` ### Installation and Usage: ```sh gem install ebook_renamer # Show the list of options ebook_renamer ``` ### Usage/Synopsis ``` Usage: ebook_renamer Options: -b, [--base-dir=BASE_DIR] # Base directory # Default: . (current directory) -r, [--recursive], [--no-recursive] # Search for files recursively # Default: --recursive -s, [--sep-string=SEP_STRING] # Separator string between each word in output filename # Default: '_' (underscore) -d, [--downcase], [--no-downcase] # Convert each word in the output filename to lowercase # Default: --no-downcase -t, [--capitalize], [--no-capitalize] # Capitalize each word in the output filename # Default: --no-capitalize -c, [--commit], [--no-commit] # Make your changes permanent # Default: --no-commit -v, [--version], [--no-version] # Display version information Rename multiple ebook files (pdf,epub,mobi) from a given directory ``` ### Quick Usage The shortest command that you can run to rename files is ```sh # This will rename any ebook files under the directory `~/Dropbox/ebooks` # and any sub-directory for (*.epub, *.pdf, *.mobi) using the default settings cd ~/Dropbox/ebooks ebook_renamer --commit ``` To see what the result would be like without making any changes (dry-run) ```sh cd ~/Dropbox/ebooks/ ebook_renamer --base-dir . ``` Should see the result like ``` ----------------------------------------------------------- FYI: no changes as this is a dry-run, please use --commit ----------------------------------------------------------- 1 of 4 old name : ./demo1.pdf 1 of 4 new name : ./Fearless.Refactoring.by.Andrzej.Krzywda.pdf 2 of 4 old name : ./demo2.epub 2 of 4 new name : ./EPUB.3.0.Specification.by.EPUB.3.Working.Group.epub 3 of 4 old name : ./subdir/demo3.pdf 3 of 4 new name : ./subdir/Reliably.Deploying.Rails.Applications.by.Ben.Dixon.pdf 4 of 4 old name : ./subdir/demo4.epub 4 of 4 new name : ./subdir/EPUB.3.0.Specification.by.EPUB.3.Working.Group.epub ``` with `--sep-string` option ```sh cd ~/Dropbox/ebooks/ ebook_renamer --base-dir . --sep-string _ ``` should result in something like ``` ----------------------------------------------------------- FYI: no changes as this is a dry-run, please use --commit ----------------------------------------------------------- 1 of 4 old name : ./demo1.pdf 1 of 4 new name : ./Fearless_Refactoring_by_Andrzej_Krzywda.pdf 2 of 4 old name : ./demo2.epub 2 of 4 new name : ./EPUB_3_0_Specification_by_EPUB_3_Working_Group.epub 3 of 4 old name : ./subdir/demo3.pdf 3 of 4 new name : ./subdir/Reliably_Deploying_Rails_Applications_by_Ben_Dixon.pdf 4 of 4 old name : ./subdir/demo4.epub 4 of 4 new name : ./subdir/EPUB_3_0_Specification_by_EPUB_3_Working_Group.epub ``` ### Detail Usage Run the following command from the directory that contain the file(s) that you want to rename. ```sh # Cd to the directory containing the file(s) you like to rename cd ~/Dropbox/ebooks/ # Or specify the directory as an option from any where if you set appropriate # version of ruby (e.g. rbenv local 2.1.1 or rvm use 2.1.1) ebook_renamer --base-dir ~/Dropbox/ebooks/samples # Run the command without making any changes to the files (dry-run) in the current directory ebook_renamer --base-dir . --recursive # Once you are happy with the result then ebook_renamer --base-dir . --recursive --commit # Or using the short version ebook_renamer -b . -r -c ``` ### Misc Options In addition to the above usage, you can also use the two new flags `--downcase` or `--capitalize` ```shell # Lowercase each word in the result filename ebook_renamer --base-dir . --sep-string '_' --recursive --downcase --commit ``` will produce the result filename like `start_with_why_how_great_leader_inspire_everyone_to_take_action_by_simon_sinek.pdf`. ```shell # Capitalize each word in the result filename ebook_renamer --base-dir . --sep-string '_' --recursive --capitalize --commit ``` will produce the result filename like `Start_With_Why_How_Great_Leader_Inspire_Everyone_To_Take_Action_by_Simon_Sinek.pdf`. ### Alternative - Check out my other gem called [ebooks_renamer][] which provides similar functionality but implemented in pure ruby. - [ebooks_renamer][] does not rely on the external software like [Calibre CLI][] to be install before use! ### Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Make sure that you add the tests and ensure that all tests are passed 5. Push to the branch (`git push origin my-new-feature`) 6. Create new Pull Request [Calibre]: http://www.calibre-ebook.com/ [Calibre CLI]: http://manual.calibre-ebook.com/cli/cli-index.html [http://calibre-ebook.com/download]: http://calibre-ebook.com/download [ebooks_renamer]: http://rubygems.org/gems/ebooks_renamer [Semantic Versioning]: http://semver.org